cmake:如何检查预处理器是否已定义

2024-03-05

我无法得到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(使用前将#替换为@)

cmake:如何检查预处理器是否已定义 的相关文章

随机推荐