使用CMake查找本地目录库

时间:2019-02-09 21:10:50

标签: c++ cmake

我有一个名为myproject的项目,其构建目录为myhome/myproject/build

我有一个名为libmylibrary.so的库,它位于myhome/folder/lib中,标头位于myhome/folder/include

然后我在myhome/myproject中有一个CMakeLists.txt,它看起来像:

cmake_minimum_required(VERSION 3.5.1)                                                                                                                                                                       
project (myproject)
file(GLOB SOURCES "src/*.cpp")
add_executable(myproject ${SOURCES})

find_library(MYLIB mylibrary REQUIRED)
target_link_libraries(myproject PRIVATE mylibrary)

我在构建目录中运行cmake ../,然后运行make,我得到:

/usr/bin/ld: cannot find -lmylibrary
collect2: error: ld returned 1 exit status

我根本不明白这是多么困难。我想念什么?我已经尝试过感觉像是随机的但命名极为相似的CMake指令的每种组合,但没有成功(也没有关于成功或失败原因的信息,因此实际上只是尝试和错误)。

我该如何告诉[任何需要知道的内容]我的库在哪里,以便CMake可以找到它,而无需在CMake脚本中对其进行硬编码?谢谢。

谢谢

1 个答案:

答案 0 :(得分:0)

对于有关库位置的提示CMake,您可以将CMAKE_LIBRARY_PATH变量设置到包含所需库的目录:

cmake -DCMAKE_LIBRARY_PATH=myhome/folder/lib <other-cmake-arguments>

或者,如果您的库包含在lib/子目录下,则可以使用CMAKE_PREFIX_PATH变量提示上一级目录:

cmake -DCMAKE_PREFIX_PATH=myhome/folder/lib <other-cmake-arguments>

后一种方式也提示了其他find_*命令,请参见my answer以获取更多信息。