CMake if(DEFINED MY_COMPILE_DEF)不工作.如何将预编译定义用作条件



我正试图使用编译定义作为条件来构建Gtest可执行文件。有问题的CMake代码如下:

add_compile_definitions(TEST_BENCH)
if(DEFINED TEST_BENCH)
enable_testing()
endif()

但这不起作用。我已经阅读了一些关于${my_var}语法使用的类似问题和答案,而我的代码中并非如此。

编译定义可以在条件句中使用吗?如果可以,如何使用?

使用cmake(缓存(变量,这也将允许用户正确配置您的项目。

set(TEST_BENCH OFF CACHE BOOL "Enables testing of your project")
if(TEST_BENCH)
add_compile_definition(TEST_BENCH)
enable_testing()
endif()

然后,用户(和您(可以在ccmakecmake-guicmake -DTEST_BENCH=ON的帮助下根据他们的需求配置您的项目。我认为target_compile_definitions通常比全局add_compile_definitions更受欢迎。

不过,我不建议这样做,您可以将add_compile_definition修改的COMPILE_DEFINITIONS变量和TEST_BENCH匹配,这样可以检查宏是否已设置。

简而言之,add_compile_definitions((用于源文件,set((用于CMake变量。如果(DEFINED(要检查CMake或env变量,则需要使用set((。归功于@squareskitleshttps://stackoverflow.com/a/61815468/2324483

最新更新