【问题标题】:How can I specify an include file from the GCC Command Line?如何从 GCC 命令行指定包含文件?
【发布时间】:2012-05-19 05:30:03
【问题描述】:

在 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 选项似乎可以强制包含一个文件,而无需在源文件中以任何方式提及它,但我希望源文件表明包含文件是包含在此处,但它的名称是在源文件“外部”指定的(最终,来自 makefile)。

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

【问题讨论】:

    标签: gcc macros include


    【解决方案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.
    %
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2012-10-10
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        相关资源
        最近更新 更多