CMake构建LLVM模块库报错:未指定模块目标的LIBRARY DESTINATION
问题分析与解决
错误原因
当使用LLVM提供的add_llvm_library创建MODULE类型的插件库时,LLVM的CMake脚本(AddLLVM.cmake)默认会自动为该目标生成安装规则。但你的配置中没有为这个模块库指定安装目录,导致CMake报错提示缺少LIBRARY DESTINATION。
解决方案
有两种可行的解决方式,根据你的需求选择:
方式1:为模块库指定安装路径
在add_llvm_library之后添加对应的install命令,明确指定模块库的安装目录。示例修改如下:
add_llvm_library(VirtinePass MODULE pass/pass.cpp pass/VirtineCompiler.cpp pass/command.cpp PLUGIN_TOOL opt ) # 添加安装规则,路径可根据项目需求调整 install(TARGETS VirtinePass LIBRARY DESTINATION lib/llvm-plugins)
方式2:禁用自动安装规则
如果你不需要安装这个LLVM插件模块,可以在add_llvm_library中添加NO_INSTALL参数,让LLVM的CMake脚本跳过自动安装逻辑:
add_llvm_library(VirtinePass MODULE pass/pass.cpp pass/VirtineCompiler.cpp pass/command.cpp PLUGIN_TOOL opt NO_INSTALL # 禁用自动安装规则 )
补充说明
- 若想统一设置安装路径,可提前定义
CMAKE_INSTALL_LIBDIR变量(如set(CMAKE_INSTALL_LIBDIR lib)),后续install命令可直接复用该默认路径。 - LLVM的
add_llvm_library针对不同库类型(STATIC/SHARED/MODULE)有差异化默认行为,其中MODULE类型默认绑定安装规则,这是它与原生add_library的核心区别之一。
内容的提问来源于stack exchange,提问作者S Bitchebe
相关产品推荐
相关产品推荐

