说我有看起来像这样的代码:
target_compile_options(${PROJECT_NAME}
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:...Options...>
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:...Options...>
)
很明显,第二行(检查编译器是GCC,Clang还是AppleClang)很长。为了将其缩短为多行,我尝试了以下操作:
target_compile_options(${PROJECT_NAME}
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:...Options...>
$<$<OR:$<CXX_COMPILER_ID:GNU>,
$<CXX_COMPILER_ID:Clang>,
$<CXX_COMPILER_ID:AppleClang>>:...Options...>
)
但是,在运行CMake时,我发现这不起作用。我收到以下错误:
CMake Error at CMakeLists.txt:23 (target_compile_options):
Error evaluating generator expression:
$<OR:$<CXX_COMPILER_ID:GNU>,;$<CXX_COMPILER_ID:Clang>,;$<CXX_COMPILER_ID:AppleClang>>
Parameters to $<OR> must resolve to either '0' or '1'.
很明显,CMake不能确认生成器表达式的下一部分在连续的行上,而不是在同一行上。由于我想保留可读性,因此我不想诉诸第一个选项。我意识到我可以弄乱string(CONCAT ...)
并将结果放在一个变量中,但是我想避免这种情况,因为我在整个项目中只有一个目标,这会使变量变得毫无用处。>
如何将此类生成器表达式分成多行以保持可读性?