在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) 许可协议。转载请注明出处!
