假设我有如下代码:
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...>
)
Run Code Online (Sandbox Code Playgroud)
很明显,第二行(检查编译器是 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...>
)
Run Code Online (Sandbox Code Playgroud)
但是,在运行 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'.
Run Code Online (Sandbox Code Playgroud)
很明显,CMake 没有意识到生成器表达式的下一部分在连续行上,而不是在同一行上。因为我想保持可读性,所以我不想诉诸第一个选项。我意识到我可以string(CONCAT ...)把结果放在一个变量中,但我想避免这种情况,因为我的整个项目中只有一个目标,这会使变量变得毫无用处。
如何将这样的生成器表达式拆分为多行以保持可读性?
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |