我有一个相当长的预处理器定义列表,我想让它们可以用于使用gcc编译的几个C程序。
基本上我可以创建一个庞大的-DDEF1 = 1 -DDEF2 = 2 ...选项来传递给gcc,但这会造成很大的混乱,很难在版本控制系统中使用,并且可能在某个时候将来打破命令行长度限制。
我想在文件中定义我的定义。
基本上-imacros会做我想做的事情,除了它只将它传递给第一个源文件:(以下来自gcc文档):
-include file进程文件,好像#include“file”出现在主源文件的第一行。但是,搜索了第一个目录 for file是预处理器的工作目录而不是 包含主源文件的目录。如果没有找到,那就是 在#include“...”搜索链的其余部分中搜索为 正常。如果给出了多个-include选项,则包含文件 按照它们出现在命令行中的顺序。
-imacros文件与-include完全相同,只是扫描文件产生的任何输出都被丢弃了。它定义的宏仍然是定义的。 这使您可以从头部获取所有宏 处理其声明。 -imacros指定的所有文件都是 在-include指定的所有文件之前处理。
我需要在所有源文件中提供定义,而不仅仅是第一个。
答案 0 :(得分:2)
查看this reference的底部。
您可能需要的是@file
选项。此选项告诉GCC使用file
作为命令行选项。该文件当然可以包含预处理器定义。
答案 1 :(得分:0)
老实说 - 听起来你需要在构建环境中做更多的事情。
例如,有一个建议是,您应该创建一个包含在所有源文件中的头文件,并#define所有定义。
您也可以使用-include
,但指定一个显式路径 - 应该在Makefile / build环境中确定。
如果您的Makefile独立构建每个源文件,-imacros将工作到它自己的目标文件(这是典型的)。听起来你只是把所有的资源投入建造一个物体。