我有一个名为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脚本中对其进行硬编码?谢谢。
谢谢
答案 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以获取更多信息。