【发布时间】:2017-09-14 02:06:55
【问题描述】:
我无法让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 文件中,为什么我需要对其进行测试,这是因为在最终实现中,这些将来自外部文件,即 @ 987654328@ed 在主 CMakeFile.txt 例如:
include(project_defs.txt)
if (OS)
....
【问题讨论】:
-
预处理器是什么意思? CMake 没有...
-
CMake 自动定义了几个变量来描述系统。因此,您可以检查(在
if命令中)这些变量是否包含依赖于操作系统的代码。见Variables That Provide Information。 -
@usr1234567 by pre-processor 我的意思是由
-D选项定义的变量gcc(与#define相同)。 -
@Tsyvarev
OS只是一个例子。我要定义的是我的项目的自定义属性,所以cmake不会知道它们。 -
那么,您的方法有什么问题(设置 CMake 变量,然后检查它)?如果 cmake 脚本被包含(通过
include()命令),那么调用者可以看到它的所有定义。 (他们说,that include()没有引入变量定义范围)。
标签: cmake preprocessor