我可以在源代码之外使用 Clang 库吗?
Posted
技术标签:
【中文标题】我可以在源代码之外使用 Clang 库吗?【英文标题】:Can I use Clang libs out of source? 【发布时间】:2019-09-12 15:26:07 【问题描述】:一段时间以来,我一直在尝试使用源代码之外的 clang 库。本质上,我一直在处理各种 cmake 文件。我通过 llvm pass 完成了类似的事情,我能够使用 llvm libs 以下列方式编译 cpp 文件:
这是父目录下的cmake文件。
cmake_minimum_required(VERSION 3.10)
find_package(LLVM REQUIRED CONFIG)
message(STATUS $LLVM_VERSION)
list(APPEND CMAKE_MODULE_PATH "$LLVM_CMAKE_DIR")
include(AddLLVM)
add_definitions($LLVM_DEFINITIONS)
include_directories($LLVM_INCLUDE_DIRS)
add_subdirectory(myPasses)
子目录下的cmake文件为:
cmake_minimum_required(VERSION 3.10)
add_llvm_library(LLVMtest MODULE
file1.cpp
file2.cpp
file3.cpp
)
如果我可以制作这样的 cmake 文件来使用 clang 来编写 FrontEndActions,那就太好了。
【问题讨论】:
这里有问题吗?听起来好像你已经管理了一切。你有源代码,没有人可以把它从你身上拿走,而且 AFAICT 你甚至说服了 cmake 做你的竞标(恭喜!)那么问题是什么? 我给的 cmake 是给一个 llvm 通行证而不是一个 clang ast 访问者,把它放在那里的原因是为了让我知道我在找什么,很抱歉造成混乱。跨度> 【参考方案1】:您可以像使用 LLVM 一样搜索 Clang 的 CMake 模块:
find_package(Clang REQUIRED CONFIG)
然后,您可以像通常使用 CMake 项目一样使用 Clang 库,例如:
add_executable(ClangTest
file1.cpp
file2.cpp
file3.cpp
)
target_link_libraries(ClangTest clangBasic clangEdit)
还有一些类似于你从 LLVM 的 CMake 中获得的功能:source code(我没用过,所以不能评论这部分)。
【讨论】:
以上是关于我可以在源代码之外使用 Clang 库吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用可见性属性(没有 __declspec(dllexport))时,Clang 可以生成导入库吗?