c++ - 使用 CMake 查找本地目录库
问题描述
我有一个名为的项目myproject
,带有一个构建目录myhome/myproject/build
。
我有一个名为的库libmylibrary.so
,myhome/folder/lib
其中包含标题myhome/folder/include
然后我有一个 CMakeLists.txt,myhome/myproject
其中看起来像:
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 指令的每一种组合,但没有成功(也没有关于成功或失败原因的信息,所以它实际上只是反复试验)。
我如何告诉 [whatever thing need to know] 我的库在哪里,以便 CMake 可以找到它,而无需在 CMake 脚本中对其进行硬编码?谢谢。
谢谢
解决方案
有关库位置的提示 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_*
命令,请参阅我的答案以获取更多信息。
推荐阅读
- c - c中的“无效声明”是什么意思?
- python - 如何使默认的 matplotlib 光标“+”跨越整个 x 轴?
- node.js - 如何有效地将所有子数组与相关 id 组合并删除所有重复对象
- ionic-framework - 如何使用 IONIC 4 在后台模式下流式传输音频
- python - Python:无法导入已安装的模块 pdpbox
- c# - 如何将带有本地安装的 MongoDB 的 Asp.net 核心 Web api 部署到 Microsoft Azure?
- javascript - Vuetify v-combobox,勾选一个框后,删除文本
- python - 在批处理脚本中安装 Python + Django
- python - 如何使用 python 在没有 WASAPI 的情况下挂钩输出音频?
- python-3.x - return self.tk.call(self._w, 'cget', '-' + key) TypeError: can only concatenate str (not "int") to str