【发布时间】:2018-09-13 09:55:34
【问题描述】:
有谁知道如何将选项`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
我可以使用include_directories(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_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")
但是,这看起来是手动的,我仍在寻找更好的解决方案...
【问题讨论】:
-
我尝试了
execute_process(COMMAND bash "-c" "llvm-config --cxxflags --ldflags --libs" OUTPUT_VARIABLE CMD_OUTPUT)之类的命令,并将其设置为CMAKE_CXX_FLAGS和CMAKE_EXE_LINKER_FLAGS,但它不起作用。 -
应该是
COMMAND llvm-config --cxxflags --ldflags --libs- 用引号括起来是错误的。您也可以使用execute_process的RESULT_VARIABLE 选项来检查命令执行是否成功。 -
抱歉,没有看到您的更新。使用
link_directories和target_link_libraries的方法应该可以工作。你能解释一下,在那种情况下究竟是什么“不起作用”? (来自 CMake、编译器或链接器的错误)。此外,使用make VERBOSE=1,您可能会看到 CMake 生成的用于编译和链接可执行文件的命令行。 -
KDevelop 有一个简洁的模块用于查找 LLVM 和 Clang:cgit.kde.org/kdevelop.git/tree/cmake/modules/FindLLVM.cmake