如何将CMake生成器表达式拆分为多行?

时间:2018-07-17 00:51:53

标签: cmake

说我有看起来像这样的代码:

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 ...)并将结果放在一个变量中,但是我想避免这种情况,因为我在整个项目中只有一个目标,这会使变量变得毫无用处。

如何将此类生成器表达式分成多行以保持可读性?

0 个答案:

没有答案