2017-01-17 35 views
1

我想在編譯時將C include文件的名稱指定爲C標誌。使用gcc預處理器爲#include定義文件名

例如

#include MY_INCLUDE_FILE 
int main(int argc, const char * argv[]) {...} 

將由預處理器用不了兩年時間,以

#include "some_incfile.h" 
int main(int argc, const char * argv[]) {...} 

做這樣的事情

gcc -DMY_INCLUDE_FILE="some_incfile.h" main.c 

我已經使用字符串化運算符#擴張企圖,但只得到了這樣的錯誤as error: expected "FILENAME" or <FILENAME>

這甚至可能嗎? -D定義不是完全必要的,重要的部分是,包括文件名可以在gcc命令行設置

+1

這個想法很好,問題是引號的外殼擴展 –

回答

5

你必須逃離「:

gcc -DMY_INCLUDE_FILE=\"some_incfile.h\" main.c 
+0

那很容易......當然應該記住要逃脫'''。這個效果很好,而且是我所要求的,所以這是被接受的答案。來自anonymoose的答案也解決了我的問題。 – bits

1

使用-include選項

gcc -include "somefile.h" main.c 
+0

不完全是我所要求的,但也解決了它同樣的問題,甚至可能以更優雅的方式解決問題。 – bits

1

你可以做這樣的事情

# if defined AAA 
#define INC "x.h" 
#elif defined BBB 
#define INC "y.h" 
#endif 

#include INC 

和從命令行你做gcc -DAAA

,當然,也可以直接通過gcc -DINC="\"FILE.h\""如果該文件是真正隨機從外部產生的,由生成文件,等等

重要的是INC由宏擴展程序進行評估,以有效的文件名(參照Prosser的算法)。