如何将没有值的参数传递给CMake?

如何将没有值的参数传递给CMake?,cmake,Cmake,在CMake中,我是否可以传递一个没有值的变量作为参数,并检查是否提供了它 cmake -DPAR1=123 -DPAR2 # CMakeLists.txt if (PAR2) message("PAR2 detected") else() message("PAR2 not detected") endif() 使用此代码,我得到了错误: Parse error in command line argument: -DPAR2 Should be: VAR:type=val

在CMake中,我是否可以传递一个没有值的变量作为参数,并检查是否提供了它

cmake -DPAR1=123 -DPAR2

# CMakeLists.txt
if (PAR2)
    message("PAR2 detected")
else()
    message("PAR2 not detected")
endif()
使用此代码,我得到了错误:

Parse error in command line argument: -DPAR2
Should be: VAR:type=value
CMake Error: No cmake script provided.
CMake Error: Problem processing arguments. Aborting.

请注意,即使您以某种方式设法不传入任何内容(例如,通过传递空字符串),它也不会做您想要做的事情,因为
if(PAR2)
将计算为假值

如果要使用诸如
If(PAR2)
之类的条件,则必须为
PAR2
提供一个真实值,例如
1
Y
ON
TRUE

cmake -DPAR1=123 -DPAR2=ON
CMake命令行参数的格式必须为
var=value
。但是,模拟布尔或
#ifdef
的一种方法是为
true
案例传递一个有效值(可以是您想要的任何值):

cmake -DPAR1=123 -DPAR2=True
cmake -DPAR1=123
并在
false
情况下完全忽略变量:

cmake -DPAR1=123 -DPAR2=True
cmake -DPAR1=123
最后,在
CMakeLists.txt
文件中,将if语句更改为用于检查
PAR2
变量是否存在:

if (DEFINED PAR2)
    message("PAR2 detected")
else()
    message("PAR2 not detected")
endif()

这样传递空变量的上下文是什么?你能传递一个空字符串吗?@squareskittles-是的,我能。但是对于一个二进制参数,我更愿意用类似于
-DPAR2
的东西传递它,这意味着
true
,或者省略它,这意味着
false
。CMake希望
-D
参数的形式是
type=value
。这就是错误消息告诉您的。您可以将PAR2设置为等于任何
-DPAR2=anything
作为
true
的大小写,然后将其忽略为
false
。如果要取消设置变量(使其未定义),请使用
-UPAR2
。您可能需要更改CMake参数,因为
-DPAR2
本身无效。我只是想提出一些替代方法来实现你的目标。你的意思是说在CMake中没有什么比得上
#ifdef
?@Pietro是的,有<代码>如果(定义参数2)。