如何避免CMake安装共享库时同时安装导入库?
Windows下Qt+CMake仅安装共享库运行时文件的解决方案
方法1:通过组件(Component)过滤
给共享库目标分配不同组件,安装时仅选择运行时组件:
- 配置目标属性,将运行时文件和导入库分别归类:
add_library(${PROJECT_NAME} SHARED ${SOURCES}) # 可选:指定输出目录,让文件结构更清晰 set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib ) # 标记运行时文件为Runtime组件,导入库为Development组件 set_target_properties(${PROJECT_NAME} PROPERTIES COMPONENT Runtime ARCHIVE_COMPONENT_NAME Development )
- 安装时仅安装Runtime组件:
install(TARGETS ${PROJECT_NAME} COMPONENT Runtime DESTINATION ${DeploymentFolder} )
CMake会自动识别组件归属,只安装.dll运行时文件,跳过.lib导入库。
方法2:直接指定安装目标类型
利用CMake安装指令的目标类型过滤,仅声明RUNTIME类型(对应Windows下的.dll):
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${DeploymentFolder} # 省略ARCHIVE类型的安装配置,即可跳过导入库 )
这种方式更简洁,因为SHARED库的ARCHIVE类型对应导入.lib,不声明就不会安装该类型文件。
注意事项
- 两种方法都无需手动指定文件名,完全依赖CMake的目标机制,适配Qt项目的常规构建流程。
- 若后续需要为其他项目提供导入库,只需补充
ARCHIVE DESTINATION ...的配置即可,扩展性强。
内容的提问来源于stack exchange,提问作者Refugnic Eternium
相关产品推荐
相关产品推荐

