如何获取CMake中链接的*.lib文件的绝对路径?
确定CMake中链接的.lib文件路径及打印方法
一、这些.lib文件的来源路径
- 你用到的
d3d11.lib、dwmapi.lib、d3dcompiler.lib都是Windows SDK自带的系统库,CMake会自动从Windows SDK的标准库目录里查找。具体路径取决于你安装的Windows SDK版本,一般在类似C:\Program Files (x86)\Windows Kits\10\Lib\<SDK版本号>\um\<架构>的目录下(<架构>对应x64、x86等你当前的编译架构)。 - 细分来看:
d3d11.lib和dwmapi.lib属于User Mode(UM)库,通常在上述路径的um子目录下;d3dcompiler.lib多数情况也在同个UM目录,部分SDK版本可能放在shared子目录里。
二、打印这些.lib的绝对路径的方法
这里有几种实用的操作方式:
方法1:用find_library显式查找并输出路径
修改你的CMake代码,先逐个查找库并获取绝对路径,再链接,同时打印出来:
# 查找每个库的绝对路径 find_library(D3D11_LIB d3d11.lib) find_library(DWMAPI_LIB dwmapi.lib) find_library(D3DCOMPILER_LIB d3dcompiler.lib) # 打印路径到控制台 message(STATUS "d3d11.lib 绝对路径: ${D3D11_LIB}") message(STATUS "dwmapi.lib 绝对路径: ${DWMAPI_LIB}") message(STATUS "d3dcompiler.lib 绝对路径: ${D3DCOMPILER_LIB}") # 链接到目标可执行文件 target_link_libraries(exec PRIVATE ${D3D11_LIB} ${DWMAPI_LIB} ${D3DCOMPILER_LIB})
重新执行CMake配置时,控制台就会输出每个库的完整绝对路径。
方法2:查看CMake生成的项目文件或构建脚本
- 如果生成的是VS项目,打开项目属性,进入链接器->输入->附加依赖项,就能看到这些库的完整绝对路径;
- 如果用Ninja或Makefile生成器,直接查看构建目录下的
build.ninja或Makefile,里面的链接命令行会包含所有链接库的绝对路径。
方法3:开启CMake的详细构建输出
- 用Makefile生成器时,执行构建命令加上
--verbose参数(比如make --verbose); - 用VS时,在项目属性的生成事件->常规里开启“详细生成”模式。构建过程中,控制台会打印完整的链接命令,其中就能看到这些.lib的绝对路径。
内容的提问来源于stack exchange,提问作者Planck35
相关产品推荐
相关产品推荐

