我有一个脚本(CMake 3.12),看起来像这样(删除了多余的东西):
option(XXH_D_FNF "" OFF)
...
target_compile_definitions(xxh PRIVATE $<IF:XXH_D_FNF, XXH_FORCE_NATIVE_FORMAT, > XXH_FORCE_MEMORY_ACCESS=${XXH_D_FMA})
意图是将预处理程序定义XXH_FORCE_NATIVE_FORMAT
添加到target_compile_defintions
,前提是相关选项设置为ON
,否则保持未定义状态。但是,这给了我错误:
First parameter to $<IF> must resolve to exactly one '0' or '1' value.
[通过将XXH_D_FNF
包装在${}
中不是固定的。如何使用此选项的值作为表达式中的条件?
target_compile_definitions
和所有类似接口都是累积的。刚:target_compile_definitions(xxh PRIVATE XXH_FORCE_MEMORY_ACCESS=${XXH_D_FMA})
if (XXH_D_FNF)
target_compile_definitions(xxh PRIVATE XXH_FORCE_NATIVE_FORMAT)
endif()
IF
的表达式):$<IF:condition,true_string,false_string>
如果因此,您的条件true_string
为condition
,则评估为1
。否则求值为false_string
。通常,condition
是布尔值生成器表达式。
itself必须是boolean生成器表达式。因此,如果将
因此,您对XXH_D_FNF
包装在布尔生成器表达式中,则将使用$<BOOL:${XXH_D_FNF}>
。当选项为false
时,该值为OFF
,否则为true
。target_compile_definitions
的完整呼叫看起来像这样:
target_compile_definitions(xxh PRIVATE $<IF:$<BOOL:${XXH_D_FNF}>, XXH_FORCE_NATIVE_FORMAT, > XXH_FORCE_MEMORY_ACCESS=${XXH_D_FMA})