Man*_*dhu 6 preprocessor cmake
我无法cmake测试是否已定义预处理器.例如:
cmake_minimum_required(VERSION 2.8.9)
project (cmake-test)
add_definitions(-DOS=LINUX)
if(NOT <what condition goes here?>)
message(FATAL_ERROR "OS is not defined")
endif()
Run Code Online (Sandbox Code Playgroud)
以下测试不起作用:
if (NOT COMMAND OS)
if (NOT DEFINED OS)
if (NOT OS)
Run Code Online (Sandbox Code Playgroud)
我可以通过使用set()并测试常规cmake变量然后定义预处理器宏来使其工作.例如:
set(OS LINUX)
if (OS)
add_definitions(-DOS=${OS})
else()
message(FATAL_ERROR "OS is not defined")
endif()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你想知道为什么我需要测试它,如果变量/预处理器在同一个文件中,那是因为在最终实现中这些将来include自主CMakeFile.txt中的外部文件例如:
include(project_defs.txt)
if (OS)
....
Run Code Online (Sandbox Code Playgroud)
通常,传递给编译器的所有定义均由 CMake 控制。也就是说,您使用以下命令创建一个 CMake 变量
option(SOMEFEATURE "Feature description" ON)
Run Code Online (Sandbox Code Playgroud)
或者
set(OS "" CACHE STRING "Select your OS")
Run Code Online (Sandbox Code Playgroud)
cmake -D OS=DOS用户通过CMake GUI 或在 CMake GUI 中设置它们。然后你可以使用if()运算符来有条件地add_definitions()编译命令行。
更新:
如果您确实想访问预处理器标志,可以使用COMPILE_DEFINITIONS目标属性。您可以通过以下方式访问它:
get_target_property(OUTVAR target COMPILE_DEFINITIONS)
Run Code Online (Sandbox Code Playgroud)