我可以在源代码之外使用 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 可以生成导入库吗?

Google 的 QUIC 有独立的库吗? [关闭]

技术分享|Clang Static Analyzer Checker简介

查找整页高度

是否可以在电子应用程序之外运行 python 代码

Clang-format 语法在自己的行上获取初始化程序左大括号