在大型 C/C++ 项目的编译时使用 GNU m4

Use GNU m4 at compile time for large C/C++ project

背景

我有一个大型项目,目前正在重构。问题之一是产品使用的公共路径(即对 /opt/dev 和该位置的子路径的引用)在整个地方大量滥用字符串文字(300 多个实例),包括:


目标

我想使用 GNU 来定义一个包含一组通用宏的文件,这样我们就可以“一次编写,随处使用”,这样如果我们的代码是分支的(典型的新product),我们可以只更改那个文件中的宏,而不是寻找重复的字符串文字并调试它们好几天。这对于像脚本这样的简单事情来说已经足够简单了,因为我只是在构建输出路径中创建源代码树的副本,并直接在脚本上创建 运行 M4。


问题

到目前为止唯一的缺点是,这看起来对 C/C++ 项目来说是一项巨大的工作,因为我只想在 expansion/substitution 处执行 M4 宏编译时间。这意味着,为了避免修改从 git 签出的源文件,我将不得不修改我的构建脚本(很多 Makefile)以处理代码的临时副本而不是原始源文件他们自己。否则,运行ning M4 直接在受版本控制的源代码上将生成对本地工作副本的更改,并且开发人员很可能将此代码的 M4 评估副本提交到版本控制,从而破坏M4 努力。


问题

是否可以指示 在编译期间评估 macros/expansions,或者通过某些外部工具或 GCC 本身的某些功能?否则,我的构建脚本可能需要大修才能支持 M4 宏。

使用 m4 为 C and/or C++ 代码生成 project-config.h header。在每个需要使用其中一个宏的文件中使用 header。确保程序员知道应该使用什么。可能在签入之前强制使用代码检查,或定期扫描代码库?当 header 更改时重新编译受影响的文件。不要不必要地改变它。