#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:
Окончательный набор параметров компиляции или ссылки, используемых для целевого объекта, создается путем накопления параметров из текущего целевого объекта и требований к использованию его зависимостей. Набор параметров не дублируется, чтобы избежать повторения. Несмотря на то, что это полезно для отдельных опций, этап удаления дублирования может привести к разделению групп опций. Например, -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>"