Windows下开发LLVM玩具编译器时缺失.inc文件的问题求助
问题:Windows下基于LLVM开发编译器时缺失.inc文件及llvm-tblgen工具
环境信息
- 开发栈:Flex + Bison + LLVM
- IDE:CLion
- 系统:Windows
- C标准:C17
当前CMake配置
cmake_minimum_required(VERSION 3.28) project(Compiler) set(CMAKE_CXX_STANDARD 17) include_directories("D:\\DEVELOPMENT\\LLVM\\llvm-project\\llvm\\include") add_executable(Compiler lexer.yy.cpp parser.tab.hpp Ast.hpp Symbol.hpp Symbol.cpp parser.tab.cpp Ast.cpp )
编译错误详情
编译项目时,LLVM头文件Intrinsics.h和Attributes.h中引用的llvm/IR/IntrinsicEnums.inc、llvm/IR/Attributes.inc提示文件不存在,具体日志:
====================[ Build | Compiler | Debug ]================================ D:\DEVELOPMENT\CLion\bin\cmake\win\x64\bin\cmake.exe --build C:\Users\20786\Desktop\C++\CompilerPrinciple\ExperimentEdition\cmake-build-debug --target Compiler -j 14 [1/4] Building CXX object CMakeFiles/Compiler.dir/Ast.cpp.obj FAILED: CMakeFiles/Compiler.dir/Ast.cpp.obj D:\DEVELOPMENT\mingw64\bin\c++.exe -ID:/DEVELOPMENT/LLVM/llvm-project/llvm/include -g -fdiagnostics-color=always -MD -MT CMakeFiles/Compiler.dir/Ast.cpp.obj -MF CMakeFiles\Compiler.dir\Ast.cpp.obj.d -o CMakeFiles/Compiler.dir/Ast.cpp.obj -c C:/Users/20786/Desktop/C++/CompilerPrinciple/ExperimentEdition/Ast.cpp In file included from D:/DEVELOPMENT/LLVM/llvm-project/llvm/include/llvm/IR/Module.h:22, from C:/Users/20786/Desktop/C++/CompilerPrinciple/ExperimentEdition/Ast.cpp:7: D:/DEVELOPMENT/LLVM/llvm-project/llvm/include/llvm/IR/Attributes.h:89:14: fatal error: llvm/IR/Attributes.inc: No such file or directory 89 | #include "llvm/IR/Attributes.inc" | ^~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated.
尝试操作及遇到的问题
已知需编译LLVM源码生成.inc文件,但执行以下CMake配置命令后,未在build/bin找到llvm-tblgen工具及目标.inc文件,且配置日志显示大量Linux相关依赖缺失:
cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE="Release"
解决方案
方案1:使用预编译LLVM二进制包(推荐)
Windows下编译LLVM源码依赖复杂,优先选择官方预编译包:
- 下载对应Windows版本的LLVM预编译包(需匹配你的工具链,如MSVC或MinGW)
- 修改CMake配置,通过
find_package自动引入LLVM的头文件、库和定义:
cmake_minimum_required(VERSION 3.28) project(Compiler) set(CMAKE_CXX_STANDARD 17) # 替换为你的预编译LLVM路径下的cmake配置目录 set(LLVM_DIR "D:/DEVELOPMENT/LLVM/prebuilt/lib/cmake/llvm") find_package(LLVM REQUIRED CONFIG) include_directories(${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) add_executable(Compiler lexer.yy.cpp parser.tab.hpp Ast.hpp Symbol.hpp Symbol.cpp parser.tab.cpp Ast.cpp ) # 链接所需LLVM组件库 llvm_map_components_to_libnames(LLVM_LIBS core irreader) target_link_libraries(Compiler ${LLVM_LIBS})
方案2:正确编译LLVM源码生成文件
若坚持编译源码,需适配Windows环境:
- 安装依赖:
- 安装Python 3.8+(LLVM编译必需)
- 安装Git(拉取LLVM子模块,确保源码完整)
- 使用MSVC工具链(LLVM官方对MSVC支持更完善,MinGW依赖问题较多)
- 重新配置并编译:
- 打开Visual Studio开发者命令提示符(确保环境变量正确)
- 执行CMake配置命令:
cmake -S llvm -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" - 编译
llvm-tblgen及相关生成文件:cmake --build build --config Release --target llvm-tblgen - 编译完成后,
llvm-tblgen位于build/bin/Release,.inc文件生成在build/include/llvm/IR目录
- 项目中引用生成文件:
- 在CMake中添加
include_directories指向LLVM编译后的build/include目录,优先级高于源码的include目录
- 在CMake中添加
内容的提问来源于stack exchange,提问作者陈那几
相关产品推荐
相关产品推荐

