如何转义 CMake 生成器表达式中的 <> 字符?

How can I escape <> characters in a CMake generator expression?

我正在编写一个 CMake 文件来支持包括 ASM 语言在内的 IAR 工具链,但将来会为 GCC 等工具保留该选项。

我写了一个这样的生成器表达式:

target_compile_options(my_library PRIVATE
   
    # ASM language options
    $<$<COMPILE_LANG_AND_ID:ASM,IAR>:
        -s+
        -w+
        --cpu Cortex-M7
        --fpu VFPv5_sp
        -M<> # This is a problem 
    >
    
)

汇编程序的最后一个选项需要使用 <> 但这会导致 CMake 出现问题,因为 > 表示生成器表达式的结尾,这是可以理解的。我尝试使用 -M\<\> 等反斜杠或 -M'<>' 或 '"-M'<>'"` 等引号转义字符,但没有成功。我什至尝试定义一个单独的变量,但输出命令仍然是错误的:

set(MY_IAR_ASM_FLAG "-M<>")
target_compile_options(my_library PRIVATE
   
    # ASM language options
    $<$<COMPILE_LANG_AND_ID:ASM,IAR>:
        ${MY_IAR_ASM_FLAG}
    >

在所有情况下,我都会在命令行中遇到一个杂乱无章的 >

转义这些字符以便获得正确的 ASM 开关的正确方法是什么?或者有什么好的解决方法吗?

您可以像这样使用 CMake escaped characters(例如,$<ANGLE-R>

target_compile_options(my_library PRIVATE

# ASM language options
$<$<COMPILE_LANG_AND_ID:ASM,IAR>:
    -s+
    -w+
    --cpu Cortex-M7
    --fpu VFPv5_sp
    -M<$<ANGLE-R> # This is a problem 
>
)