我在這裏使用一個解析器生成,不幸堅持把一個讓C預處理器忽略某些#include指令
#include <some/file.h>
在每個生成的源文件的頂部。標題自很久以來已重新命名。雖然強制編譯器(gcc)使用-include new/header.h
的新標頭並沒有問題,但從每個生成的文件中刪除上述指令都會使構建過程複雜化。
有沒有辦法告訴gcc忽略some/file.h
?
我在這裏使用一個解析器生成,不幸堅持把一個讓C預處理器忽略某些#include指令
#include <some/file.h>
在每個生成的源文件的頂部。標題自很久以來已重新命名。雖然強制編譯器(gcc)使用-include new/header.h
的新標頭並沒有問題,但從每個生成的文件中刪除上述指令都會使構建過程複雜化。
有沒有辦法告訴gcc忽略some/file.h
?
不,你可以後處理你生成的文件 - 我說:不!
或者您可以只添加'。'到你的系統包括目錄(或者你的本地包含路徑 - 確保它也是一個包含路徑的系統)。
然後創建一個'some'目錄,並在那裏有一個#include的1行代碼,並去掉你的-include。
我猜有些原因可能不起作用 - 因爲它似乎是使用-include之前要做的更直接和可以理解的事情。特別是因爲你可以評論傳遞文件來解釋發生了什麼。
將some/file.h
替換爲空文件。
爲什麼不從某個/ file.h創建一個符號鏈接到new/header.h,並刪除-include指令?
因爲它曾經是一個生活在/ usr/include中的系統頭文件。不需要修改/ usr/include來編譯一些應用程序。 – 2009-01-13 23:36:43
#include <some/file.h>
開始可能是有點像
#ifndef _FILE_H_
#define _FILE_H_
如果是這樣,就在#include
命令前加#define _FILE_H_
,它應該忽略它。 雖然我不確定這是否是最佳解決方案。
爲了這個工作,它必須首先找到一些/ file.h文件。 – 2009-01-13 23:37:17
嘗試使用preprocessor指令,如#if和#ifdef和gcc -DSYMBOL =值命令行標誌。
在例如,如果您編譯使用GCC = -DREQUIRE_STDC 1 -o myfile.o myfile.c文件,和你的.c文件包含:
#if defined(REQUIRE_STDC) && defined(__STDC__)
#include "some/file.h"
#else
#include "another/file.h"
#endif /* defined(REQUIRE_STDC) && defined(__STDC__) */
它將編譯使用「一些/文件。 h「,如果同時有STDC和REQUIRE_STDC符號定義。此外,您的頭可以包括適當的指令,以避免同一文件的多個夾雜物:
#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1
/* your C declarations here */
#endif /* MY_HEADER_FILE */
此外,您還可以在gcc preprocessor手冊。
這對普通的源文件是可能的。在我的情況下,源是即時生成的,並且我沒有對其結果輸出進行必要的控制。 – 2009-01-13 23:39:22
不,因爲它是系統標題。但用-I。無論如何,可以讓gcc找到它。謝謝。 – 2009-01-13 17:54:57