How to instruct CMake not to merge compiler arguments?

Viewed 135

I have the following instructions in my CMakeLists.txt:

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

cmake takes its own initiative and converts these command line options into

-mllvm --inline-threshold=8192 -polly

before passing it to the compiler (via make file). The compiler, of course, complains it has no idea about -polly.

How to restrict CMake cleverness and force it to pass to the compiler exactly what I meant:

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

?

1 Answers

From cmake add_compile_options:

The final set of compile or link options used for a target is constructed by accumulating options from the current target and the usage requirements of its dependencies. The set of options is de-duplicated to avoid repetition. While beneficial for individual options, the de-duplication step can break up option groups. For example, -D A -D B becomes -D A B. One may specify a group of options using shell-like quoting along with a SHELL: prefix. The SHELL: prefix is dropped, and the rest of the option string is parsed using the separate_arguments() UNIX_COMMAND mode. For example, "SHELL:-D A" "SHELL:-D B" becomes -D A -D B.

Try:

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