cmake - 如何在 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 开关?或者有没有好的解决方法?
解决方案
您可以像这样使用 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
>
)
推荐阅读
- java - 如何在 JBPM 7.48 中排除模块
- scala - 在 flink 测试用例中使用模拟类时无法加载用户类:org.mockito.codegen.RestUtil
- windows - 如何使电子应用程序响应 DPI 缩放?
- google-sheets - 如何自动更改句子以添加列表中的单词(Google 表格或 Excel)
- python - FreeFem++ movemesh 不变换网格
- c - 用于比较 C 中数字的类似 strcmp 的接口
- html - 如果文本长于 20 个字符,则在数据表列中显示更多/更少选项
- python - 作为可选参数的函数 python
- swift - SwiftUI 导航标题重叠
- java - 在 java 中使用 mailGun API 将 InputStreamSource 作为附件发送