CMake中检测构建配置实现Visual Studio不同构建类型对应zlib库链接
问题原因
你原有代码不生效的核心原因有两点:
if()属于CMake配置阶段的执行逻辑,而$<CONFIG:Debug>是生成器表达式,仅在后续构建阶段才会被求值,配置阶段的判断永远无法得到正确结果。CMAKE_BUILD_TYPE仅适用于Makefile、Ninja这类单配置生成器,Visual Studio属于多配置生成器,配置阶段该变量默认为空值,无法用来做配置类型判断。
解决方法
直接用生成器表达式定义 IMPORTED_OBJECTS 属性即可,无需配置阶段的 if() 判断,将你原有ZLIB库的配置代码替换为如下内容:
add_library(ZLIB_LIBRARY OBJECT IMPORTED) # zlib added via assimp, and I can't get CMAKE_DEBUG_POSTFIX value to overwrite (because it's set within zlibs cmake file when using MSVC) # so we have to do this check set_target_properties(ZLIB_LIBRARY PROPERTIES IMPORTED_OBJECTS $<IF:$<CONFIG:Debug>,${ASSIMP_INSTALL_DIR}/lib/zlibstaticd.lib,${ASSIMP_INSTALL_DIR}/lib/zlibstatic.lib> )
该写法会在构建阶段自动根据你当前选择的Visual Studio配置类型,匹配对应的lib文件,完全适配多配置生成器的使用场景。如果你后续其他依赖库也需要区分Debug/Release版本的lib文件,也可以用相同的$<IF:$<CONFIG:Debug>,Debug版本路径,Release版本路径>格式的生成器表达式处理。
内容的提问来源于stack exchange,提问作者whitwhoa
相关产品推荐
相关产品推荐

