Как передать комбинированные параметры компилятора с target_compile_options в CMake? - PullRequest
2 голосов
/ 15 октября 2019

Я использую настроенный clang / llvm для создания своего проекта. Кастомизация - это в основном добавление проходов оптимизации. Чтобы передать параметры моим пропускам при компиляции с использованием clang, я использую:

clang [..] -mllvm -MyOption [..]

Теперь случается, что мне нужно передать несколько вариантов таким образом:

clang [..] -mllvm -MyOption -mllvm -MyOption2=value [..]

Это в сочетании сCMake target_compile_options() перестает работать, CMake удаляет второй -mllvm, потому что кажется, что он дублирован.

target_compile_options(vslib INTERFACE -mllvm -MyOption)
target_compile_options(vslib INTERFACE -mllvm -MyOption2=val)

Я пытался поместить " вокруг обоих вариантов, не работает.

Есть ли способ добиться этого с помощью CMake?

Ответы [ 2 ]

5 голосов
/ 15 октября 2019

https://cmake.org/cmake/help/v3.12/command/target_compile_options.html:

Набор параметров не дублируется, чтобы избежать повторения. Несмотря на то, что шаг устранения дублирования полезен для отдельных опций, он может разбить группы опций. Например, -DA -DB становится -DA B. Можно указать группу параметров, используя кавычки, подобные оболочке, с префиксом SHELL: *. 1006 * Префикс SHELL: удаляется, а остальная часть строки параметрованализируется с использованием режима UNIX_COMMAND deta_arguments (). Например, "SHELL: -DA" "SHELL: -DB" становится -DA -D B.

Так что в вашем случае это будет:

target_compile_options(vslib INTERFACE "SHELL:-mllvm -MyOption" "SHELL:-mllvm -MyOption2=val")
0 голосов
/ 15 октября 2019

Попробуйте:

get_property(tmp TARGET vslib PROPERTY INTERFACE_COMPILE_OPTIONS)
list(APPEND tmp -mllvm)
list(APPEND tmp -MyOption)
list(APPEND tmp -mllvm)
list(APPEND tmp -MyOption2=value)
set_property(TARGET vslib PROPERTY INTERFACE_COMPILE_OPTIONS "${tmp}")

или, может быть, просто:

set_property(TARGET vslib APPEND PROPERTY INTERFACE_COMPILE_OPTIONS -mllvm -MyOption)
set_property(TARGET vslib APPEND PROPERTY INTERFACE_COMPILE_OPTIONS -mllvm -MyOption2=value)
...