Cmake 找不到动态链接库

近期在写实验程序时需要用到一个厂商给的 SDK,那么在 cmake 里应该就是添加一个 IMPORTED 的动态库,并且配置一些参数就可以了。

add_library(NTSDK SHARED IMPORTED)

set_target_properties(NTSDK PROPERTIES
  IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib64/NTControl.lib"
)

set_target_properties(NTSDK PROPERTIES
  IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib64/NTControl.dll"
)

但奇怪的是这段代码在项目根目录中的 CmakeLists.txt 还可以正常生成,但是当我想要将它写入子文件夹后再用 add_subdirectory 添加嵌套的 CmakeLists.txt 后,编译时却发现找不到这个库了。

[build] some/path/x86_64-w64-mingw32/bin/ld.exe: cannot find -lNTSDK: No such file or directory

反复试了几次还是不行,于是去翻看官方的文档,发现调用实例后面还有个 GLOBAL 选项。仔细一看,这个选项的作用正是令 target name 全局可见!

GLOBAL

Make the target name globally visible.

于是在子目录下的 CmakeLists.txt 中的 add_library 加入 GLOBAL 选项,就可以正常运行了。

add_library(NTSDK SHARED IMPORTED)

set_target_properties(NTSDK PROPERTIES
  IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib64/NTControl.lib"
)

set_target_properties(NTSDK PROPERTIES
  IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lib64/NTControl.dll"
)

Cmake 找不到动态链接库
https://worranhin.github.io/2024/09/14/cmake/
作者
Hin
发布于
2024年9月14日
许可协议