无法弄清楚如何让 CMake 为自定义 clang 驱动程序提取正确的标头
Posted
技术标签:
【中文标题】无法弄清楚如何让 CMake 为自定义 clang 驱动程序提取正确的标头【英文标题】:Can't figure out how to get CMake to pull in the correct headers for a custom clang driver 【发布时间】:2017-05-11 23:37:23 【问题描述】:在这里,CMake 让我很难受。我检查了 llvm、clang 和 extras,并创建了一个自定义驱动程序文件夹,将其添加到 llvm\tools\clang\tools\extra\CMakeLists.txt
并创建了我自己的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.8)
set(LLVM_LINK_COMPONENTS
Support
)
set(CMAKE_CXX_FLAGS $LLVM_CONFIG)
set(CMAKE_CXX_COMPILER "clang++")
add_clang_executable(mydriver
main.cpp
)
set(CLANG_LIBS clangFrontend clangDriver clangSerialization clangParse
clangCodeGen clangSema clangAnalysis clangEdit clangAST clangLex
clangBasic )
target_link_libraries(mydriver $CLANG_LIBS)
target_link_libraries(mydriver $LLVM_LIBS)
CMake 工作正常。我以 VS2017 为目标并使用 msbuild 构建 mydriver
项目
λ msbuild tools\clang\tools\extra\mydriver\mydriver.vcxproj
这会导致以下错误:
"C:\dev\llvm-build\tools\clang\tools\extra\mydriver\mydriver.vcxproj" (default target) (1) ->
(ClCompile target) ->
C:\dev\llvm\tools\clang\tools\extra\mydriver\main.cpp(45): error C2027: use of undefined type 'clang::Preprocessor Options' [C:\dev\llvm-build\tools\clang\tools\extra\mydriver\mydriver.vcxproj]
C:\dev\llvm\tools\clang\tools\extra\mydriver\main.cpp(45): error C2228: left of '.addRemappedFile' must have class /struct/union [C:\dev\llvm-build\tools\clang\tools\extra\mydriver\mydriver.vcxproj]
C:\dev\llvm\tools\clang\tools\extra\mydriver\main.cpp(50): error C2664: 'void clang::CompilerInstance::setInvocati on(std::shared_ptr<clang::CompilerInvocation>)': cannot convert argument 1 from 'clang::CompilerInvocation *' to 'st d::shared_ptr<clang::CompilerInvocation>' [C:\dev\llvm-build\tools\clang\tools\extra\mydriver\mydriver.vcxproj]
但是,clangLex
显然包含在我的 CMakeLists.txt 的 CLANG_LIBS 变量中。 clang::PreprocessorOptions
类的文档似乎表明我包含了正确的库。
有什么想法吗?
请注意,这个问题与这个问题密切相关: Generate assembly from C code in memory using libclang
【问题讨论】:
【参考方案1】:在经典的 SO 方式中,问题在于自发布示例以来包含文件已迁移。 clang documentation 需要一个新的头文件,其实就是在包含路径中。我只需要:
#include <clang/Lex/PreprocessorOptions.h>
对不起各位,这里没什么可看的。
【讨论】:
以上是关于无法弄清楚如何让 CMake 为自定义 clang 驱动程序提取正确的标头的主要内容,如果未能解决你的问题,请参考以下文章
无法弄清楚如何在同一 ScrollView 中的 WebView 上方添加自定义视图