能否独立编译LLVM的FileCheck与not工具?如何修改CMakeLists.txt?
单独编译LLVM的FileCheck和not工具解决KLEE编译依赖问题
问题1:能否单独编译这两个工具?
可以。FileCheck和not是LLVM的轻量级辅助工具,仅依赖LLVM核心库(如LLVMSupport、LLVMIRParser),无需全量编译整个LLVM项目。只要系统中已安装LLVM发布版的头文件和库,就可以单独编译这两个工具。
问题2:如何编写CMakeLists.txt实现单独编译?
不需要修改LLVM原有的CMake配置,只需在单独目录中编写极简的CMakeLists.txt即可,步骤如下:
准备源码文件
将LLVM源码目录中llvm/utils/FileCheck/FileCheck.cpp和llvm/utils/not/not.cpp复制到一个新目录(比如llvm-tools-build)。编写CMakeLists.txt
在上述新目录中创建CMakeLists.txt,内容如下:cmake_minimum_required(VERSION 3.13.4) # 查找系统中已安装的LLVM find_package(LLVM REQUIRED CONFIG) # 引入LLVM的编译参数和头文件路径 include_directories(${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) # 编译FileCheck add_executable(FileCheck FileCheck.cpp) target_link_libraries(FileCheck PRIVATE LLVMSupport LLVMIRParser) # 编译not工具 add_executable(not not.cpp) target_link_libraries(not PRIVATE LLVMSupport) # 可选:将生成的可执行文件输出到LLVM的bin目录 set_target_properties(FileCheck not PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/bin )编译步骤
- 创建编译目录并进入:
mkdir build && cd build - 配置CMake(替换
/path/to/llvm/lib/cmake/llvm为你实际的LLVM配置文件路径):cmake .. -DLLVM_DIR=/path/to/llvm/lib/cmake/llvm - 编译(
-j后接CPU核心数加速编译):make -j$(nproc)
- 创建编译目录并进入:
注意事项
- 确保LLVM发布版的版本与你下载的llvm-project源码版本完全一致,避免头文件/库版本不兼容导致编译错误。
- 若出现链接错误,可通过
llvm-config --libs support irparser命令查看当前LLVM版本需要链接的具体库名,调整target_link_libraries中的依赖项。 - 编译完成后,可将生成的
FileCheck和not复制到${LLVM_DIR}/bin目录,或在编译KLEE时通过-DFileCheck_EXECUTABLE=/path/to/FileCheck和-Dnot_EXECUTABLE=/path/to/not指定工具路径。
内容的提问来源于stack exchange,提问作者prophe
相关产品推荐
相关产品推荐

