我无法让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()
如果你想知道为什么我需要测试变量/预处理器是否在同一个文件中,原因是在最终实现中,这些将来自于被包含在主CMakeFile.txt中的外部文件。例如:
include(project_defs.txt)
if (OS)
....
if
命令中)以包含依赖于操作系统的代码。请参阅提供信息的变量。 - Tsyvarevgcc
的-D
选项定义的变量(与#define
相同)。 - Mandeep SandhuOS
只是一个例子。我试图定义我的项目的自定义属性,因此cmake
不会知道它们。 - Mandeep Sandhuinclude()
命令包含cmake脚本,则调用者可以看到所有定义。(他们说,include()
不会引入变量定义范围)。 - Tsyvarevset()
,然后检查其是否存在,再执行add_definitions()
。能够只调用一次add_definitions()
会更好。我仍在探索 @arrowd 的答案,使用get_target_property()
并检查COMPILE_DEFINITIONS
属性。 - Mandeep Sandhu