2009-01-13 63 views
0

我在這裏使用一個解析器生成,不幸堅持把一個讓C預處理器忽略某些#include指令

#include <some/file.h> 

在每個生成的源文件的頂部。標題自很久以來已重新命名。雖然強制編譯器(gcc)使用-include new/header.h的新標頭並沒有問題,但從每個生成的文件中刪除上述指令都會使構建過程複雜化。

有沒有辦法告訴gcc忽略some/file.h

回答

5

不,你可以後處理你生成的文件 - 我說:不!

或者您可以只添加'。'到你的系統包括目錄(或者你的本地包含路徑 - 確保它也是一個包含路徑的系統)。

然後創建一個'some'目錄,並在那裏有一個#include的1行代碼,並去掉你的-include。

我猜有些原因可能不起作用 - 因爲它似乎是使用-include之前要做的更直接和可以理解的事情。特別是因爲你可以評論傳遞文件來解釋發生了什麼。

5

some/file.h替換爲空文件。

+0

不,因爲它是系統標題。但用-I。無論如何,可以讓gcc找到它。謝謝。 – 2009-01-13 17:54:57

1

爲什麼不從某個/ file.h創建一個符號鏈接到new/header.h,並刪除-include指令?

+0

因爲它曾經是一個生活在/ usr/include中的系統頭文件。不需要修改/ usr/include來編譯一些應用程序。 – 2009-01-13 23:36:43

0
#include <some/file.h> 

開始可能是有點像

#ifndef _FILE_H_ 
#define _FILE_H_ 

如果是這樣,就在#include命令前加#define _FILE_H_,它應該忽略它。 雖然我不確定這是否是最佳解決方案。

+0

爲了這個工作,它必須首先找到一些/ file.h文件。 – 2009-01-13 23:37:17

0

嘗試使用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手冊。

+0

這對普通的源文件是可能的。在我的情況下,源是即時生成的,並且我沒有對其結果輸出進行必要的控制。 – 2009-01-13 23:39:22