如何转义 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
>
)
我正在编写一个 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
>
)