c++ - 连接到共享库时 cmake 中出现 "No rule to make target"错误

标签 c++ cmake shared-libraries libraries

在 Ubuntu 中,我下载了一个第三方共享库,mylibrary.so,我将其放在目录 /home/karnivaurus/Libraries 中。我还将关联的头文件 myheader.h 放在目录 /home/karnivaurus/Headers 中。我现在想使用 CMake 在我的 C++ 代码中链接到这个库。这是我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)

add_executable(demo demo.cpp)

target_link_libraries(demo /home/karnivaurus/Libraries/mylibrary)

但是,这给了我错误信息:

:-1: error: No rule to make target `/home/karnivaurus/Libraries/mylibrary', needed by `demo'.  Stop.

这是怎么回事?

最佳答案

虽然此处发布的其他答案有效,但已过时。 CMake 现在为在代码中使用预构建的外部库提供了更好的解决方案。事实上,CMake 本身甚至不鼓励使用 link_directories()。在其文档中。

target_link_libraries() 命令采用非常具体的语法来链接到外部库。一个更现代的解决方案是为您的外部库创建一个 IMPORTED CMake 目标:

add_library(MyExternalLib SHARED IMPORTED)

# Provide the full path to the library, so CMake knows where to find it.
set_target_properties(MyExternalLib PROPERTIES IMPORTED_LOCATION /home/karnivaurus/Libraries/mylibrary.so)

您稍后可以在您的代码中使用这个导入的 CMake 目标,并将其链接到您的其他目标:

target_link_libraries(demo PRIVATE MyExternalLib)

有关在 CMake 代码中使用外部第三方库的其他方法,请参阅回复 here .

关于c++ - 连接到共享库时 cmake 中出现 "No rule to make target"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807329/

相关文章:

c++ - 如何将 SunriseDD C 库与 C++ 应用程序链接?

c++ - stringstream->rdbuf()->pubsetbuf 没有设置缓冲区

cmake - cmake 中特定于外部库的 COMPILE_DEFINITIONS

c++ - CMake Unresolved external 问题

c++ - 如何通过 cmake 将版本详细信息添加到 .exe 或 .dll

android - 从静态库 *.a 文件构建共享库

c++ - 在 Linux 中构建共享库时如何使链接器因 undefined reference 而失败

c++ - 为什么项目 "run"在 NetBeans 内部终端中比在 Windows 命令提示符中更快?

java - 如何使精简/专业版本的应用程序功能与引用的库略有不同

c++ - 如何降低 OpenCV 中图像的分辨率?