Как добавить опцию `llvm-config --cxxflags --ldflags --libs` в CMake? - PullRequest
0 голосов
/ 13 сентября 2018

Кто-нибудь знает, как добавить опцию `llvm-config --cxxflags --ldflags --libs` в CMake?Самое сложное для меня - обратная связь `.

. Мне нужно настроить файлы CMake для получения команды компиляции, например:

g++  test.cpp -lclangBasic -I/usr/lib/llvm-6.0/include 
     -Wall `llvm-config --cxxflags --ldflags --libs` 

Я пытался использовать следующие параметры, ноони не работают:

add_compile_options(`llvm-config --cxxflags --ldflags --libs`)
# or
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} `llvm-config --cxxflags --ldflags --libs`")

Заранее спасибо.

===============

Обновление 1.

Используя вывод `llvm-config --cxxflags --ldflags --libs`, я могу успешно скомпилировать следующую команду:

g++  test.cpp -lclangBasic -I/usr/lib/llvm-6.0/include  
-Wall -I/usr/lib/llvm-6.0/include -L/usr/lib/llvm-6.0/lib -lLLVM-6.0

Я могу передать -I/usr/lib/llvm-6.0/include с помощью include_directories(usr/lib/llvm-6.0/include).

Но, тем не менее, я не знаю, как передать часть -L/usr/lib/llvm-6.0/lib -lLLVM-6.0 в CMake.Использование link_directories и target_link_libraries, как показано ниже, не работает для меня:

link_directories(/usr/lib/llvm-6.0/lib)
target_link_libraries(test PUBLIC "LLVM-6.0")

Кто-нибудь знает, как заставить их работать в CMake?

===============

Обновление 2.

Мне нужно добавить следующий код в файл CMakeLists.txt, чтобы заставить работать CMake.

add_library(LLVM-6.0 SHARED IMPORTED) # or STATIC instead of SHARED
set_target_properties(LLVM-6.0 PROPERTIES
  IMPORTED_LOCATION "/usr/lib/llvm-6.0/lib/libLLVM-6.0.so"
  INTERFACE_INCLUDE_DIRECTORIES "/usr/lib/llvm-6.0/include"
)
add_library(clangBasic SHARED IMPORTED) # or STATIC instead of SHARED
set_target_properties(clangBasic PROPERTIES
  IMPORTED_LOCATION "/usr/lib/llvm-6.0/lib/libclangBasic.a"
  INTERFACE_INCLUDE_DIRECTORIES "/usr/lib/llvm-6.0/include"
)
target_link_libraries(solidity PUBLIC "LLVM-6.0;clangBasic")

Тем не менее, это выглядит вручную, и я все еще ищу лучшие решения ...

1 Ответ

0 голосов
/ 17 сентября 2018

LLVM / Clang использует CMake и предоставляет конфигурационный модуль , поэтому для любого проекта, пытающегося использовать LLVM / Clang, просто нужно find_package(Clang...), чтобы перенести экспортированные цели в область действия (и don ' Для использования каких-либо внешних инструментов (например, llvm-config или pkg-config blah-blah) требуется ). Это означает, что после того, как Clang обнаружил, вы можете использовать target_link_libraries(blah Clang::clangBasic ...), и вам не нужно делать «ручной импорт» или что-либо еще, предложенное в комментариях ppl ...

В качестве быстрой проверки можно использовать следующую команду:

$ cmake --find-package -DNAME=Clang -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST
Clang found.
$ cmake --find-package -DNAME=Clang -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=COMPILE
-I/usr/lib/llvm-6.0/include

Я использовал Clang 6.0, установленный из репозитория deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main.

...