“没有规则可以成为目标"链接到共享库时cmake中的错误 [英] "No rule to make target" error in cmake when linking to shared library

查看:191
本文介绍了“没有规则可以成为目标"链接到共享库时cmake中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In Ubuntu, I have downloaded a third-party shared library, mylibrary.so, which I have placed in the directory /home/karnivaurus/Libraries. I have also placed the associated header file, myheader.h, in the directory /home/karnivaurus/Headers. I now want to link to this library in my C++ code, using cmake. Here is my CMakeLists.txt file:

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)

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

However, this gives me the error message:

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

这是怎么回事?

推荐答案

您可以使用静态库的完整路径.要链接动态链接,最好像这样使用link_directories():

You may use a full path to the static library. To link w/ dynamic one, better to use link_directories() like this:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)
link_directories(/home/karnivaurus/Libraries)

add_executable(demo demo.cpp)

target_link_libraries(demo mylibrary)

,并确保mylibrary在文件名中具有前缀lib和后缀.so(全名是/home/karnivaurus/Libraries/libmylibrary.so).

and make sure mylibrary has prefix lib and suffix .so in file name (i.e. full name is /home/karnivaurus/Libraries/libmylibrary.so).

为使您的项目更灵活,最好编写一个 finder模块 并避免使用/home/karnivaurus/*

To make you project more flexible, you'd better to write a finder module and avoid hardcode paths like /home/karnivaurus/*

这篇关于“没有规则可以成为目标"链接到共享库时cmake中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆