“没有规则可以成为目标"链接到共享库时cmake中的错误 [英] "No rule to make target" error in cmake when linking to shared library
问题描述
在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屋!