cmake find_library寻找库的规则
在CMake 中,find_library
命令用于查找库文件。它的重要性在于可以自动找到库的路径,以便在构建过程中链接。以下是一些关于 find_library
的规则和用法:
基本语法
find_library(VAR NAME [PATHS path1 path2 ...] [HINTS path1 path2 ...] [REQUIRED] [QUIET])
VAR
:将找到的库的路径存储到此变量中。NAME
:要查找的库的名称(不包含前缀和后缀)。PATHS
:指定查找库的路径。HINTS
:提供额外的路径,作为提示。REQUIRED
:如果未找到库,CMake 将报错并停止配置过程。QUIET
:如果未找到库,则不输出警告信息。
查找库的规则
-
默认搜索路径:
- CMake 会在一些默认路径中搜索库文件,如
/usr/lib
,/usr/local/lib
,以及系统特定的库路径。
- CMake 会在一些默认路径中搜索库文件,如
-
库名称的前缀与后缀:
- CMake 会自动添加平台特定的前缀(如
lib
)和后缀(如.so
,.a
,.dll
等)来查找库。例如,如果你查找mylib
,CMake 会查找libmylib.so
,libmylib.a
等。
- CMake 会自动添加平台特定的前缀(如
-
优先级:
- 如果指定了
PATHS
或HINTS
,这些路径将优先于默认路径进行搜索。 HINTS
仅作为搜索提示,不会覆盖默认路径。
- 如果指定了
-
查找策略:
- CMake 会按照以下顺序查找库:
- 指定的
PATHS
- 系统默认路径
- 指定的
HINTS
- 指定的
- CMake 会按照以下顺序查找库:
-
使用
find_library
的示例:find_library(MY_LIB NAMES mylib PATHS /usr/local/lib /opt/lib)
该命令会在
/usr/local/lib
和/opt/lib
中查找名为libmylib.so
或libmylib.a
的库。 -
条件处理:
- 你可以检查是否找到了库并根据情况采取行动:
if (MY_LIB) message(STATUS "Found mylib: ${MY_LIB}") else() message(FATAL_ERROR "mylib not found!") endif()
总结
find_library
是 CMake 中非常强大的命令,能够帮助用户自动查找和管理库。理解其搜索规则和参数设置,可以提高项目的可移植性和构建效率。