将 CMake BOOL 转发到 C++

Forward CMake BOOL to C++

我希望能够在调用 CMake 时设置一堆布尔标志,这些标志稍后会在 C++ 代码中使用。类似于:

set(DEBUG_ENABLE false CACHE BOOL "enable debugging")
target_compile_definitions(target PRIVATE DEBUG_ENABLE=${DEBUG_ENABLE})

这实际上工作正常并产生等同于:

#define DEBUG_ENABLE false

但是,BOOL 的原生 CMake 字面值是 ON/OFF 并且 CMake GUI 等工具将使用这些值,导致定义不在 C++ 中运行良好:

#define DEBUG_ENABLE OFF

将此类布尔变量从 CMake 转发到 C++ 的最佳方法是什么?

我能想到几点:

None 这些选项对我来说特别好。

我会使用 configure_file。它不会直接为您提供 C++ bool,但它实际上会随着时间的推移而扩展。

你需要制作一个配置文件模板供cmake修改,在这个例子中config.hpp.in

#cmakedefine01 DEBUG_ENABLE

接下来,将 configure_file 行添加到您的 CMakeLists.txt

configure_file(config.hpp.in "${CMAKE_BINARY_DIR}/config.hpp")

配置模板中的任何变量都将根据 cmake 中的值替换为 0/1。

工作输出:

(after configuring)
$ cat config.hpp 
#define DEBUG_ENABLE 0

$ cmake -DDEBUG_ENABLE=ON .
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/so/cmake-bool/build
$ cat config.hpp 
#define DEBUG_ENABLE 1

这也完全消除了对 target_compile_definitions 行的需要,前提是您 #include "config.hpp" 在适当的位置。