Как дать указание CMake не объединять аргументы компилятора?

#c #cmake

#c #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
  

?

Комментарии:

1. Я бы поместил это в одно правило.

2. Я благодарен, что вы делитесь тем, что вы бы сделали.

Ответ №1:

Из cmake add_compile_options:

Окончательный набор параметров компиляции или ссылки, используемых для целевого объекта, создается путем накопления параметров из текущего целевого объекта и требований к использованию его зависимостей. Набор параметров не дублируется, чтобы избежать повторения. Несмотря на то, что это полезно для отдельных опций, этап удаления дублирования может привести к разделению групп опций. Например, -D A -D B становится -D A B. Можно указать группу параметров, используя кавычки, подобные оболочке, вместе с префиксом SHELL:. Префикс SHELL: удаляется, а остальная часть строки параметров анализируется с использованием режима separate_arguments() UNIX_COMMAND. Например, «SHELL:-D A» «SHELL:-D B» становится -D A -D B.

Попробуйте:

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