gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:20:18 24 4
gpt4 key购买 nike

我无法获得 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()

如果您想知道如果变量/预处理器在同一个文件中,为什么我需要对其进行测试,这是因为在最终实现中,这些将来自外部文件 include编辑在主 CMakeFile.txt 例如:
include(project_defs.txt)
if (OS)
....

最佳答案

这是通过箭头完成答案。

我还尝试了上面箭头所指的 COMPILE_DEFINITIONS 选项,但未成功。

按照 CMake 的文档,至少对于 3.x 版本,事实证明,当您调用 add_definitions()在 CMake 中,它将定义添加到 COMPILE_DEFINITIONS 目录 属性(property)。

因此,假设您正在根据您的代码定义以下内容:

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()

关于cmake:如何检查是否定义了预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34937671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com