有人知道如何将选项`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")
但是,这是手动操作,我仍在寻找更好的解决方案...
答案 0 :(得分:2)
LLVM / Clang使用CMake并提供一个 config模块,因此,任何尝试使用LLVM / Clang的项目都只需一个find_package(Clang...)
即可将导出的目标带入范围(和不需要使用任何外部工具(例如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
我使用了从deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-6.0 main
存储库安装的Clang 6.0。