背景
我有一个正在重构的大型项目。问题之一是在各地广泛滥用产品使用的通用路径(即对/opt/dev
的引用以及此位置的子路径)的字符串文字(300多个实例),其中包括:
目标
我想使用GNU m4定义带有一组通用宏的文件,以便我们可以“编写一次,随处使用”,这样,如果我们的代码是分支的(对于新产品而言通常如此),则只需更改宏即可在那个文件中,而不是寻找重复的字符串文字并调试它们几天。这对于脚本之类的简单事情已经足够容易了,因为我只是在构建输出路径中创建源树的副本,然后直接在脚本上运行M4。
问题
到目前为止,唯一的缺点是,对于C / C++项目,这似乎是一项巨大的工作,因为我只想在编译时执行
M4
宏扩展/替换。这意味着,为了避免修改从git中 check out 的源文件,我将不得不修改构建脚本(大量的Makefile)以处理代码的临时副本,而不是原始源文件本身。否则,直接在受版本控制的源代码上运行M4
会生成对本地工作副本的更改,并且开发人员可能会将代码的这种经过M4评估的副本提交给版本控制,这会中断M4的工作。题
是否可以指示gcc在编译期间通过某些外部工具或GCC本身的某些功能来评估m4宏/扩展?如果没有,我的构建脚本可能需要进行大修才能支持M4宏。
最佳答案
使用m4
为C和/或C++代码生成project-config.h
header 。在每个需要使用宏之一的文件中使用该 header 。确保程序员知道该使用什么。可能在 checkin 之前对代码进行检查,或者定期对代码库进行扫描吗?当标题更改时,重新编译受影响的文件。不要不必要地更改它。
关于c++ - 在大型C/C++项目的编译时使用GNU m4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47357617/