【发布时间】:2017-11-09 10:33:45
【问题描述】:
我有一个大型项目,其中包含一些冲突的预处理器函数定义,例如:
1.h:
#define CONFLICTINGMACRO(a, b) {doSomething(a, b)}
2.h:
#define CONFLICTINGMACRO(a, b, c) {doSomethingElse(a, b, c)}
有些文件同时导入了两个标题,但发现错误的定义(最先加载的那个)。
我在一个名为 redefinitions.h 的文件中(重新)定义项目的其他符号(例如 Windows 函数和 Linux 上不可用的类型)
该文件通过编译器标志全局添加到项目的每个源文件中:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include redefinitions.h")
为了快速轻松地调试其他功能(我现在不需要冲突的宏),我尝试将以下几行添加到 redefinitions.h:
#ifdef CONFLICTINGMACRO
#undef CONFLICTINGMACRO
#endif
#define CONFLICTINGMACRO(...) {}
不幸的是,这似乎没有什么不同。我最好的猜测是,这与 *.h 文件的加载顺序有关。
您对如何在整个项目的全局范围内覆盖项目不同头文件中定义的宏有任何想法吗?
【问题讨论】:
-
大概你不能自己编辑文件
1.h和2.h? -
不幸的是,这些冲突分散在数千个文件中(不要问为什么,我自己仍然对这种混乱感到有些惊讶......)并编辑它们甚至编写脚本编辑需要相当长的时间(当然,这是将来必须要做的事情)。
-
我无法告诉编译器忽略特定的(例如按名称)宏定义。
标签: c++ c-preprocessor