【发布时间】:2013-08-08 10:25:51
【问题描述】:
在我们的 C/C++ 项目中,我们使用了一个包含 #ifdef 和 #defines 的配置头(约 1000 行)
#if (defined(HW_1) || defined(SOME_TECHNOLOGY_SUPPORTED)) && defined(OTHER_TECHNOLOGY_SUPPORTED)
#define SOME_FEATURE_AVAILABLE
#endif
在我们的构建配置中,我们预定义了一些传递给编译器的定义。这会在我们的配置头中产生不同的定义(如 SOME_FEATURE_AVEILABLE)。
由于我们的配置头很大,所以也有点乱。
这个#define地狱有什么替代品吗?
或者是否有任何工具可以帮助查看在什么情况下设置了哪些定义。
我们正在开发嵌入式固件,因此我们无法用运行时 if 替换条件编译。
【问题讨论】:
-
你在哪个系统上编译。适用于哪个操作系统?寻找
autoconf和autotools.... -
如果你坚持使用 ANSI C89 和 ISO C++ 98,那么你就不需要它们。
-
如果您定义静态 const 布尔值,编译器仍然可以优化掉条件。
-
我会寻找
cmake,尤其是configure_file命令。 -
您确定在某些情况下使用#define 而不是运行时条件时不会进行过早的优化吗?
标签: c++ c c-preprocessor buildconfiguration