我可以将 CMake 变量设置为布尔表达式的结果吗?

ein*_*ica 5 variables cmake

考虑以下 CMake 代码:

if(VAR_1 STREQUAL VAR_2)
    set(VAR_3 ON)
else()
    set(VAR_3 OFF)
endif()
Run Code Online (Sandbox Code Playgroud)

我想写同样的东西,但作为一个单行。我并不特别关心VAR_3最终使用哪种布尔表示。所以我需要的是将它设置为布尔表达式的评估结果。

现在,这不起作用:

set(VAR_3 (VAR_1 STREQUAL VAR_2) )
Run Code Online (Sandbox Code Playgroud)

这也不是:

set(VAR_3 (${VAR_1} STREQUAL ${VAR_2}) )
Run Code Online (Sandbox Code Playgroud)

相反,他们给了我类似的东西;ValueOfVar1Here;STREQUAL;ValueOfVar2Here;——这不是我想要的。

我能以某种方式得到我想要的评价吗?

Kam*_*Cuk 5

不,你不能。一行只有一个cmake命令。每个 cmake 脚本命令调用都必须以 a 结尾)(可选地后跟注释),后跟换行符(请参阅有关源文件的 cmake 文档)。您仍然可以编写一个宏来执行您想要的操作。

macro(assign_me_bool var)
     if(${ARGN})
         set(${var} ON)
     else()
         set(${var} OFF)
     endif()
endmacro()

assign_me_bool(VAR_3 VAR_1 STREQUAL VAR_2)
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方法,但是 - CMake 本身是否有类似的宏?例如在某个模块中? (2认同)