在CMake中,set()
语句用于定义和设置变量:
1 |
|
它在功能上,似乎与其他编程语言的变量定义语法无异,不过其中暗藏着一个大坑。
首先看看运行下面的CMake代码块,将其保存为/tmp/var_test.cmake
:
1 |
|
我的预期很简单。用或运算比较VAR1
和VAR2
两个变量,将比较结果赋给RESULT1
和RESULT2
。由于VAR1
为空,VAR2
不为空,故RESULT1
和RESULT2
的值都应该为逻辑值0
(或者是OFF
)。
然而,运行结果却出乎我的意料:
1 |
|
可见,set()
语句并不能直接像C、Python等语言那样,使用逻辑值给变量赋值! 相反,它只会将输入的参数作为字符串处理,拼接成一个新的字符串,甚至连运算符OR
都作为普通字符处理。这无疑是一个大坑。
如果想要对变量或常量做逻辑运算,取逻辑运算的结果,那么要注意,这在CMake是行不通的。你只能使用if ()
语句来实现你的预期,借助它来进行条件判断,根据不同的结果给目标变量赋不同的值。
因此,上面的代码可以做如下改写:
1 |
|
- 本文作者: 爱拼安小匠
- 本文链接: https://anclark.github.io/2022/12/29/Programming_Tips/CMake_set函数的大坑/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0(署名-非商用-禁止演绎 3.0) 许可协议。转载请注明出处!