gcc:传递预处理器列表定义

时间:2013-03-26 15:17:37

标签: gcc c-preprocessor

我有一个相当长的预处理器定义列表,我想让它们可以用于使用gcc编译的几个C程序。

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

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

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

  

-include file进程文件,好像#include“file”出现在主源文件的第一行。但是,搜索了第一个目录   for file是预处理器的工作目录而不是   包含主源文件的目录。如果没有找到,那就是   在#include“...”搜索链的其余部分中搜索为   正常。如果给出了多个-include选项,则包含文件   按照它们出现在命令行中的顺序。

     

-imacros文件与-include完全相同,只是扫描文件产生的任何输出都被丢弃了。它定义的宏仍然是定义的。   这使您可以从头部获取所有宏   处理其声明。 -imacros指定的所有文件都是   在-include指定的所有文件之前处理。

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

2 个答案:

答案 0 :(得分:2)

查看this reference的底部。

您可能需要的是@file选项。此选项告诉GCC使用file作为命令行选项。该文件当然可以包含预处理器定义。

答案 1 :(得分:0)

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

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

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

如果您的Makefile独立构建每个源文件,-imacros将工作到它自己的目标文件(这是典型的)。听起来你只是把所有的资源投入建造一个物体。