如何通过cmake --install将库的调试构建产物(不含头文件)安装到debug子目录
解决方案:CMake按配置区分Debug/Release安装路径
要实现你期望的目录结构,核心是在CMake的install命令中针对不同构建配置指定不同的安装目标路径——你之前尝试的<THING>_OUTPUT_DIRECTORY_<CONFIG>系列属性仅控制构建过程中文件的生成位置,和cmake --install的复制逻辑无关。
方法1:分配置编写install命令
直接为Release和Debug配置分别指定安装路径,头文件统一安装到根目录的include下:
# 安装头文件(所有配置共用) install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/SDL3/ DESTINATION include/SDL3 FILES_MATCHING PATTERN "*.h") # 安装Release构建产物 install(TARGETS SDL3 CONFIGURATIONS Release RUNTIME DESTINATION bin # 对应Release版SDL3.dll ARCHIVE DESTINATION lib # 对应Release版SDL3.lib(静态库/导入库) LIBRARY DESTINATION lib) # Windows下一般为dll,此处可忽略 # 安装Debug构建产物 install(TARGETS SDL3 CONFIGURATIONS Debug RUNTIME DESTINATION debug/bin # 对应Debug版SDL3.dll ARCHIVE DESTINATION debug/lib # 对应Debug版SDL3.lib LIBRARY DESTINATION debug/lib)
方法2:用生成器表达式简化代码
如果不想重复编写install(TARGETS),可以用CMake生成器表达式根据当前配置动态拼接路径:
# 安装头文件(所有配置共用) install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/SDL3/ DESTINATION include/SDL3 FILES_MATCHING PATTERN "*.h") # 按配置动态指定安装路径 install(TARGETS SDL3 RUNTIME DESTINATION $<$<CONFIG:Debug>:debug/>bin ARCHIVE DESTINATION $<$<CONFIG:Debug>:debug/>lib LIBRARY DESTINATION $<$<CONFIG:Debug>:debug/>lib)
关键说明
CONFIGURATIONS参数:明确当前install规则仅对指定构建配置生效。- 生成器表达式
$<$<CONFIG:Debug>:debug/>:当构建配置为Debug时,自动在路径前添加debug/前缀;Release配置则直接使用后面的bin/lib路径。 - 头文件的install命令不指定
CONFIGURATIONS,因此所有配置都会将头文件安装到同一位置,符合你的需求。
验证方式
构建完成后,分别执行以下命令安装对应配置的产物:
# 安装Release版本 cmake --install . --config Release --prefix ~/Install # 安装Debug版本 cmake --install . --config Debug --prefix ~/Install
执行后即可得到你期望的目录结构:
Install/ ├─ include/ │ └─ SDL3/ │ ├─ SDL.h │ └─ ... ├─ bin/ │ └─ SDL3.dll # Release ├─ lib/ │ └─ SDL3.lib # Release └─ debug/ ├─ bin/ │ └─ SDL3.dll # Debug └─ lib/ └─ SDL3.lib # Debug
内容的提问来源于stack exchange,提问作者ProgramGamer
相关产品推荐
相关产品推荐

