如何从GCC命令行指定include文件?

如何从GCC命令行指定include文件?,gcc,macros,include,Gcc,Macros,Include,在Windows下使用GCC,我希望能够在GCC命令行(或从手动管理的makefile)上指定要包含在正在编译的文件中的特定包含文件的名称。在我看来,理想情况下,源代码文件将包含一行类似于 #include INCLUDEFILENAME …然后在gcc命令行上指定的文件名将替换为INCLUDEFILENAME文本 通过使用-D选项(例如-D INCLUDEFILENAME=“C:\TestLib\Test1.h”)在gcc命令行上定义一个名为INCLUDEFILENAME的宏,我似乎可以接

在Windows下使用GCC,我希望能够在GCC命令行(或从手动管理的makefile)上指定要包含在正在编译的文件中的特定包含文件的名称。在我看来,理想情况下,源代码文件将包含一行类似于

#include INCLUDEFILENAME 
…然后在gcc命令行上指定的文件名将替换为
INCLUDEFILENAME
文本

通过使用
-D
选项(例如
-D INCLUDEFILENAME=“C:\TestLib\Test1.h”
)在gcc命令行上定义一个名为INCLUDEFILENAME的宏,我似乎可以接近实现这一点,但当文件名文本被替换到
#include
语句中时,它不会用双引号括起来,如果没有这些文件,则无法将其视为要包含的文件。当然

#include "INCLUDEFILENAME" 
…不作为INCLUDEFILENAME工作,然后变为字符串文字,不会被宏值替换。我尝试过其他方法来指定双引号(
\x22
\”
“\”
,等等),但这些方法在
\include
行似乎不起作用

我知道gcc
-include
选项,它似乎可以强制包含一个文件,而不在源文件中以任何方式提及它,但我更希望源文件指示此处包含一个include文件,但它的名称是在源文件的“外部”指定的(最终,来自makefile)


对于我如何实现这一目标的任何建议,我们将不胜感激。

您必须将双引号
作为定义的一部分(或
,视情况而定):

%cat test.c
#包括
#包括其他文件
int main(){printf(“%s\n”,func());}
%cat func.c
char*func(){返回“它工作了。”;}
%gcc test.c-DOTHERFILE='“func.c”'
%/a.out
成功了。
%

您可以使用丑陋但经典的字符串化技巧:

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