Документация для условных выражений генератора (которая включает выражения, использующие IF
) гласит:
$<IF:condition,true_string,false_string>
Оценивается как true_string
, если condition
равно 1
.В противном случае оценивается как false_string
.Как правило, condition
является логическим выражением генератора .
Итак, ваше условие само должно быть логическим выражением генератора,Поэтому, если мы обернем 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})