如何通过CMake获取共享库SHARED_LIBRARY的.lib文件路径
Windows下CMake获取共享库导入库(.lib)的完整路径
直接获取完整路径(推荐)
使用CMake生成表达式$<TARGET_LINKER_FILE:SHARED_LIBRARY>,它会直接返回共享库对应的导入库(.lib)的完整路径,自动适配当前构建类型(Debug/Release)的子目录结构:
# 示例:将路径存入变量 set(SHARED_LIB_IMPLIB_PATH $<TARGET_LINKER_FILE:SHARED_LIBRARY>)
手动拼接路径(备用)
如果需要手动组合路径,可按以下步骤操作:
- 获取导入库的文件名
get_target_property(IMPLIB_FILENAME SHARED_LIBRARY TARGET_LINKER_FILE_NAME) - 获取库的基础输出目录
get_target_property(LIB_BASE_DIR SHARED_LIBRARY LIBRARY_OUTPUT_DIRECTORY) - 结合构建类型拼接完整路径
- 单配置生成器(如Makefiles):
set(FULL_IMPLIB_PATH "${LIB_BASE_DIR}/${CMAKE_BUILD_TYPE}/${IMPLIB_FILENAME}") - 多配置生成器(如Visual Studio),用生成表达式适配不同配置:
set(FULL_IMPLIB_PATH "${LIB_BASE_DIR}/$<CONFIG>/${IMPLIB_FILENAME}")
- 单配置生成器(如Makefiles):
关键说明
- Windows平台下,SHARED库的
.dll是运行时文件,.lib是链接时依赖的导入库。CMake中$<TARGET_FILE:>指向.dll,$<TARGET_LINKER_FILE:>指向.lib。 ARCHIVE_OUTPUT_DIRECTORY是静态库的输出目录,不适用于共享库的导入库,因此你之前获取到空值是正常现象。
内容的提问来源于stack exchange,提问作者CIsForCookies
相关产品推荐
相关产品推荐

