首页 > 解决方案 > 如何在 CMake 生成器表达式中转义 <> 字符?

问题描述

我正在编写一个 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 开关?或者有没有好的解决方法?

标签: cmakeiar

解决方案


您可以像这样使用 CMake转义字符(例如,$<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 
>
)

推荐阅读