有什么办法可以很容易或可能使用true/false或on/off或yes/no在CMake的的发电机表情,除了1/0?
至于文档而言,仅1与0正在生成器表达式内的认可。
然而,至于如果命令而言,1,ON,YES,TRUE,Y都被认为是布尔值。
这使某些事情变得混乱。例如,可以option在配置阶段使用该命令从用户获取输入,然后尝试在生成器表达式中使用其值;但是,在这种情况下,如果值不是1或,则cmake会抱怨0。存储在CMake缓存中的布尔变量也是如此。
cmake_minimum_required(VERSION 2.8.12)
add_custom_target(print
${CMAKE_COMMAND} -E echo $<1:hello> $<0:world>
)
Run Code Online (Sandbox Code Playgroud)
创建CMakeLists.txt具有上述内容的文件,运行cmake .,然后运行make(生成器表达式仅在构建时评估)。它将hello按预期打印。
但是,以下示例甚至无法与cmake命令本身一起使用:
cmake_minimum_required(VERSION 2.8.12)
add_custom_target(print2
${CMAKE_COMMAND} -E echo $<true:hello> $<false:world>
)
Run Code Online (Sandbox Code Playgroud)
这是它的输出(在配置时):
-- Configuring done
CMake Error at CMakeLists.txt:3 (add_custom_target):
Error evaluating generator expression:
$<true:hello>
Expression did not evaluate to a known generator expression
CMake Error at CMakeLists.txt:3 (add_custom_target):
Error evaluating generator expression:
$<false:world>
Expression did not evaluate to a known generator expression
-- Generating done
-- Build files have been written to: /tmp/cmake
Run Code Online (Sandbox Code Playgroud)
再次:
有什么办法可以很容易或可能使用true/false或on/off或yes/no在CMake的的发电机表情,除了1/0?
或者,或者,一种简单的方法来将具有这些值之一的变量转换为,1/0以便可以在生成器表达式中使用它?
这就是$<BOOL:...>生成器表达式的作用。请参阅生成器表达式文档的“ 逻辑表达式”部分的开头。修改示例:
cmake_minimum_required(VERSION 2.8.12)
add_custom_target(print2
${CMAKE_COMMAND} -E echo $<$<BOOL:true>:hello> $<$<BOOL:false>:world>
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3309 次 |
| 最近记录: |