在 CMake 中链接外部预建库 [重复]
Posted
技术标签:
【中文标题】在 CMake 中链接外部预建库 [重复]【英文标题】:Linking an external pre-built library in CMake [duplicate] 【发布时间】:2020-08-28 13:05:27 【问题描述】:我正在构建一个使用项目范围之外的库的项目。我对 CMake 比较陌生,我似乎无法构建这个库。我的代码如下:
cmake_minimum_version(VERSION 3.1)
project(cameraCode VERSION 1.0.0)
add_library(camControl SHARED IMPORTED
/opt/MVS/lib/64/MVCamControl
/opt/MVS/include/MvCamControl.h)
add_executable($PROJECT_NAME cameraCode.cpp)
target_link_libraries($PROJECT_NAME
PRIVATE
camControl)
当我做这个时,它配置得很好,但是当我构建它时,我得到这个错误: make[2] *** 没有规则来制作“cameraCode”需要的目标“camControl-NOTFOUND”。停下来。
【问题讨论】:
/opt/MVS/lib/64/MVCamControl 下有哪些文件? 这是我试图包含的 .so 文件的完整路径 它怎么可能是“.so 文件的完整路径”但不以“.so”结尾?那个目录下有libMVCamControl.so
吗?
对,就是.so文件所在的地方
那么.so文件叫什么?
【参考方案1】:
add_library 表示您正在构建库。
我不认为 add_library 是你想要的,如果这是你所说的预建库。
看起来您只需要 link_directories 和 include_directories 就可以让客户端找到库和头文件。
【讨论】:
我刚刚尝试过,现在我得到了这个:/usr/bin/ld: 找不到 -lcamControl 您必须检查文档以了解正确的语法 这就是我现在拥有的: find_library(MvCamControl /opt/MVS/lib/64/ /opt/MVS/include/ REQUIRED) add_executable($PROJECT_NAME cameraCode.cpp) target_link_libraries( $ PROJECT_NAME PUBLIC MvCamControl ) MvCamControl 是库的名称,库本身的路径在下面,头文件的路径在下面。【参考方案2】:IMPORTED
库您是对的,但您需要 set some properties 而不是将文件作为 add_library
的一部分传递:
add_library(camControl SHARED IMPORTED)
set_target_properties(camControl PROPERTIES
IMPORTED_LOCATION /opt/MVS/lib/64/MVCamControl/libMVCamControl.so
INTERFACE_INCLUDE_DIRECTORIES /opt/MVS/include/
)
【讨论】:
好的,我试过了,我得到这个错误:/usr/bin/ld: 找不到 -lMvCameraControl 在 /opt/MVS/lib/64/MVCamControl/ 中是否有libMvCameraControl.so
?使用 make VERBOSE=1
显示完整的链接器命令行
这是我现在得到的错误:没有规则来制作目标'/opt/MVS/lib/64/libMVCameraControl.so',需要'cameraCode'。停止。
我现在第五次问了:'/opt/MVS/lib/64/'下的.so文件叫什么名字?
它是 MvCameraControl.so以上是关于在 CMake 中链接外部预建库 [重复]的主要内容,如果未能解决你的问题,请参考以下文章