如何在CMake中添加选项“llvm config--cxfFlags--ldflags--libs”?

如何在CMake中添加选项“llvm config--cxfFlags--ldflags--libs”?,cmake,clang,llvm,Cmake,Clang,Llvm,有人知道如何将选项`llvm config--cxflags--ldflags--libs`添加到CMake中吗?对我来说,最棘手的部分是背景标记` 我需要配置CMake文件以获得编译命令,如: g++ test.cpp -lclangBasic -I/usr/lib/llvm-6.0/include -Wall `llvm-config --cxxflags --ldflags --libs` 我尝试使用以下选项,但它们不起作用: add_compile_options(`l

有人知道如何将选项
`llvm config--cxflags--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--cxfflags--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
$ 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
我可以使用
include\u目录(usr/lib/llvm-6.0/include)
传递
-I/usr/lib/llvm-6.0/include

但是,我仍然不知道如何将部分
-L/usr/lib/llvm-6.0/lib-lLLVM-6.0
传递给CMake。像下面这样使用
link\u目录
target\u link\u库
对我不起作用:

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")

然而,这看起来是手动的,我仍然在寻找更好的解决方案…

find_包(Clang…)就可以将导出的目标带入一个范围(并且不需要使用任何外部工具)(如
llvm-config
pkg-config-blah-blah
)。这意味着在Clang找到后,您可以使用
target_-link_库(blah-Clang::clangBasic…
),无需执行任何“手动导入”或ppl在注释中建议的任何操作

作为快速检查,可以使用以下命令:

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
$ 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

我使用了从
deb安装的clang6.0http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main
repo.

“对我来说,最棘手的部分是回溯”-对于evaluate命令行,使用
execute\u process
,如所述或。之后,最棘手的部分是正确使用此输出:因为它不仅包含编译器选项,还包含链接器选项,您不能只分配
CMAKE\u CXX\u标志
。您还应该使用
CMAKE\u EXE\u链接器标志
和命令
链接_目录
链接库
。我尝试了类似
execute\u进程的命令(命令bash“-c”llvm config--cxflags--ldflags--libs”输出变量CMD\u输出)
,同时查看
CMAKE_CXX_标志
CMAKE_EXE_链接器_标志
,但它不起作用。应该是
COMMAND llvm config--cxxflags--ldflags--libs
-用引号括起来是错误的。另外,您可以使用
execute_进程
的RESULT_变量选项来检查命令执行是否成功。对不起,没有看到您的更新。使用
link\u目录
target\u link\u库
应该可以工作。您能解释一下,在这种情况下什么“不工作”吗?(来自CMake、编译器或链接器的错误)。此外,使用
make VERBOSE=1
可以看到CMake为编译和链接可执行文件而生成的命令行。KDevelop有一个查找LLVM和Clang的简洁模块:感谢您的建议和解释!