1

我有一个相当长的预处理器定义列表,我想将它们提供给几个用 gcc 编译的 C 程序。

基本上我可以创建一个巨大的列表 -DDEF1=1 -DDEF2=2 ... 传递给 gcc 的选项,但这会造成巨大的混乱,很难在版本控制系统中使用,并且可能在未来的某个时候打破命令行长度限制。

我想在文件中定义我的定义。

基本上 -imacros 会做我想要的,除了它只将它传递给第一个源文件:(下面来自 gcc 文档):

-include file 处理文件,好像#include "file" 出现在主要源文件的第一行。但是,搜索文件的第一个目录是预处理器的工作目录,而不是包含主源文件的目录。如果在此处未找到,则会在 #include "..." 搜索链的其余部分中正常进行搜索。如果给出了多个 -include 选项,则文件将按照它们在命令行中出现的顺序被包含在内。

-imacros 文件 与 -include 完全一样,只是扫描文件产生的任何输出都会被丢弃。它定义的宏保持定义。这允许您从标头获取所有宏,而无需处理其声明。-imacros 指定的所有文件都在 -include 指定的所有文件之前处理。

我需要在所有源文件中都有定义,而不仅仅是第一个。

4

2 回答 2

2

看看这个参考的底部。

您可能想要的是@file选项。该选项告诉 GCCfile用于命令行选项。这个文件当然可以包含预处理器定义。

于 2013-03-26T15:21:13.487 回答
0

老实说 - 听起来您需要在构建环境中做更多的事情。

例如,一个建议是听起来您应该创建一个包含在所有源文件中的头文件并#define 所有定义。

您也可以使用-include,但指定一个明确的路径 - 这应该在您的 Makefile/build 环境中确定。

如果您的 Makefile 将每个源文件独立构建到其自己的目标文件中(这是典型的),则 -imacros 将起作用。听起来您只是将所有资源都投入到构建单个对象中。

于 2013-03-26T15:25:29.440 回答