我怎么可以指定一个包括从GCC命令行文件?(How can I specify an include

2019-10-16 17:20发布

在Windows下使用GCC,我希望能够指定gcc命令行上(或从手动管理的makefile文件)具体的include文件名包含在文件被编译。 在我看来,最好的源代码文件将包含行类似...

#include INCLUDEFILENAME 

...然后在gcc命令行上指定的文件名会被代替INCLUDEFILENAME文本。

看来我可以得到接近使用定义gcc命令行上一个名为INCLUDEFILENAME宏实现这一-D选项(例如-D INCLUDEFILENAME="C:\TestLib\Test1.h" ),但是当文件名的文本被取代入#include声明它没有双引号括起来,没有这些就不会被识别为被包含的文件。 当然…

#include "INCLUDEFILENAME" 

......不工作的INCLUDEFILENAME然后成为一个字符串文字,没有得到由宏值替换。 我试图指定双引号的其他方式( \x22\" "\""等),但这些似乎并没有对工作#include线。

我知道的是gcc的-include这似乎可以强制将包含没有它在源文件以任何方式被提到一个文件选项,但我宁愿源文件表明,一个包含文件是包括在这里,但它的名称被指定“外部”源文件(最终,从生成文件)。

我如何能做到这一点的任何建议,将不胜感激。

Answer 1:

你必须包括双引号"作为对限定部分(或<>视情况而定):

% cat test.c

#include <stdio.h>
#include OTHERFILE

int main() { printf("%s\n", func()); }

% cat func.c

char *func() { return "It worked."; }

% gcc test.c -DOTHERFILE='"func.c"'
% ./a.out
It worked.
%


Answer 2:

你可以用丑陋但经典的字串的技巧:

#define STRINGIFY2(x) #x
#define STRINGIFY(x) STRINGIFY2(x)
#include STRINGIFY(INCLUDEFILENAME)


文章来源: How can I specify an include file from the GCC Command Line?