我在三个不同的路径中有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)
答案 0 :(得分:1)
命令find_library
实际上会搜索许多位置,也可以由用户(使用find_library
调用使用CMake项目但不修改CMakeLists.txt
的人)进行调整。
此外,您(作为项目的开发人员)还可以通过HINTS
和PATHS
向搜索添加更多提示,并且这些提示也可以由用户修改。
您可以在documentation中找到有关搜索路径的完整说明。
在决定如何使find_library
在特定路径中搜索时,您需要对该路径的来源进行“分类”。一些常见的情况:
该路径是针对特定操作系统或发行版的标准路径吗?如果是这样,CMake通常默认情况下会搜索此路径。
该路径是否来自软件包的自定义安装?如果是这样,用户可以将安装前缀分配给某个变量(例如XXX_ROOT
,其中XXX是软件包名称或缩写),用作PATHS
或{{1 }}在您的HINTS
通话中。
该路径是否来自许多软件包常用的自定义安装前缀?如果是这样,用户可以将该公用前缀分配给find_library
变量,并且CMAKE_PREFIX_PATH
将自动考虑该前缀。
请注意,find_library
通常用在find_library
模块中(通过FindXXX.cmake
激活)。这样的模块可以包含其他逻辑,用于根据系统自省来查找其他可能的库位置。