我无法得到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()
以下测试不起作用:
if (NOT COMMAND OS)
if (NOT DEFINED OS)
if (NOT OS)
我可以通过使用让它工作set()
只是测试常规cmake
变量,然后定义预处理器宏。例如:
set(OS LINUX)
if (OS)
add_definitions(-DOS=${OS})
else()
message(FATAL_ERROR "OS is not defined")
endif()
万一,您想知道为什么我需要测试它,如果变量/预处理器位于same文件,这是因为在最终的实现中,这些将来自一个外部文件,该文件是include
编辑在主 CMakeLists.txt 中,例如:
include(project_defs.txt)
if (OS)
....
这是通过箭头来完成答案。
我还尝试了上面 arrowd 提到的 COMPILE_DEFINITIONS 选项,但没有成功。
遵循 CMake 的文档,至少对于 3.x 版本,事实证明,当您调用add_definitions()
在 CMake 中,它将定义添加到 COMPILE_DEFINITIONS目录财产。
因此,假设您根据代码定义以下内容:
add_definitions(-DOS=LINUX)
要检索添加到变量“MYDEFS”中的定义的字符串,您可以在 CMake 中使用以下行:
get_directory_property(MYDEFS COMPILE_DEFINITIONS)
MESSAGE( STATUS "Compile defs contain: " ${MYDEFS} )
然后你可以检查是否在${MYDEFS}
您正在寻找的定义是否存在。例如
if(MYDEFS MATCHES "^OS=" OR MYDEFS MATCHES ";OS=")
MESSAGE( STATUS "OS defined" )
else()
# You can define your OS here if desired
endif()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)