无论如何,有没有在CMake中动态查找库路径?

时间:2019-10-22 05:32:55

标签: cmake linker shared-libraries

我在三个不同的路径中有libcurl.so。可以说/usr/lib/opt/a/.../lib//opt/b/.../lib/

我想在构建时链接适当的库。如何编写CMakeLists.txt来做到这一点?

到目前为止,我已经在/usr/lib/

中进行了硬编码
project (mylib)

find_library(LIB_CURL_LIBRARY NAMES curl HINTS "/usr/lib/")

target_link_libraries (mylib curl)

1 个答案:

答案 0 :(得分:1)

命令find_library实际上会搜索许多位置,也可以由用户(使用find_library调用使用CMake项目但不修改CMakeLists.txt的人)进行调整。

此外,您(作为项目的开发人员)还可以通过HINTSPATHS向搜索添加更多提示,并且这些提示也可以由用户修改。

您可以在documentation中找到有关搜索路径的完整说明。

在决定如何使find_library在特定路径中搜索时,您需要对该路径的来源进行“分类”。一些常见的情况:

  1. 该路径是针对特定操作系统或发行版的标准路径吗?如果是这样,CMake通常默认情况下会搜索此路径。

  2. 该路径是否来自软件包的自定义安装?如果是这样,用户可以将安装前缀分配给某个变量(例如XXX_ROOT,其中XXX是软件包名称或缩写),用作PATHS或{{1 }}在您的HINTS通话中。

  3. 该路径是否来自许多软件包常用的自定义安装前缀?如果是这样,用户可以将该公用前缀分配给find_library变量,并且CMAKE_PREFIX_PATH将自动考虑该前缀。

请注意,find_library通常用在find_library模块中(通过FindXXX.cmake激活)。这样的模块可以包含其他逻辑,用于根据系统自省来查找其他可能的库位置。