【发布时间】:2013-03-26 15:17:36
【问题描述】:
我有一个相当长的预处理器定义列表,我想将它们提供给使用 gcc 编译的几个 C 程序。
基本上我可以创建一个巨大的 -DDEF1=1 -DDEF2=2 ... 选项列表来传递给 gcc,但这会造成巨大的混乱,很难在版本控制系统中使用,并且可能在某些时候将来打破命令行长度限制。
我想在一个文件中定义我的定义。
基本上 -imacros 会做我想做的事,只是它只将它传递给第一个源文件:(下面来自 gcc 文档):
-include file 处理文件,好像#include "file" 出现在主要源文件的第一行。但是,搜索的第一个目录 for file 是预处理器的工作目录,而不是 包含主要源文件的目录。如果在那里找不到,那就是 在 #include "..." 搜索链的其余部分中搜索为 普通的。如果给出多个 -include 选项,则包含文件 按照它们在命令行中出现的顺序。
-imacros file 与-include 完全一样,只是扫描文件产生的任何输出都会被丢弃。它定义的宏保持定义。 这允许您从标头中获取所有宏,而无需 处理其声明。 -imacros 指定的所有文件都是 在 -include 指定的所有文件之前处理。
我需要在所有源文件中都有定义,而不仅仅是第一个。
【问题讨论】:
-
您是否确认您确实正确阅读了文档?在我的理解中,“主源文件”并不一定意味着它只适用于第一个源文件或只适用于单个文件,而是作者只是想区分源文件和您使用
-include或-imacros加载的文件。很可能作者只是假设了只有一个源文件的“简单”情况,因此他不想使措辞过于复杂和模棱两可。如果可行,我会尝试,很可能可行。 -
我刚试过,它确实工作正常(使用 GCC-MinGW 4.7.1)。编译 两个 文件,这两个文件都使用宏,并且仅通过
-imacros包含它。
标签: gcc c-preprocessor