首页 > 解决方案 > 如何指示 CMake 不要合并编译器参数?

问题描述

我的 中有以下说明CMakeLists.txt

target_compile_options(sometarget PRIVATE
    $<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-mllvm --inline-threshold=8192>
    $<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-mllvm -polly>
)

cmake主动将这些命令行选项转换为

-mllvm --inline-threshold=8192 -polly

在将其传递给编译器之前(通过 make 文件)。当然,编译器抱怨它不知道-polly.

如何限制 CMake 的聪明才智并强制它完全按照我的意思传递给编译器:

-mllvm --inline-threshold=8192 -mllvm -polly

?

标签: c++cmake

解决方案


cmake add_compile_options

用于目标的最终编译或链接选项集是通过累积来自当前目标的选项及其依赖项的使用要求来构建的。对选项集进行重复数据删除以避免重复。虽然有利于单个选项,但重复数据删除步骤可以分解选项组。例如,-DA -DB 变为 -DA B。可以使用类似于 shell 的引用和 SHELL: 前缀来指定一组选项。SHELL: 前缀被删除,选项字符串的其余部分使用单独的参数() UNIX_COMMAND 模式进行解析。例如,“SHELL:-D A”“SHELL:-D B”变为 -DA -D B。

尝试:

"SHELL:$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-mllvm --inline-threshold=8192>"
"SHELL:$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-mllvm -polly>"

推荐阅读