当CMake项目构建依赖于第三方库/系统库(静态库/动态库),可以使用find_library命令来查找并使用库。命令的格式可以参考官方网站:https://cmake.org/cmake/help/latest/command/find_library.html。
find_library (
<VAR>
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS [path | ENV var]... ]
[PATHS [path | ENV var]... ]
[REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[VALIDATOR function]
[DOC "cache documentation string"]
[NO_CACHE]
[REQUIRED]
[NO_DEFAULT_PATH]
[NO_PACKAGE_ROOT_PATH]
[NO_CMAKE_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[NO_CMAKE_INSTALL_PREFIX]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
参数解析:
下面为一个样例,在/usr/lib/syst下搜索libsyst.so库,并且将搜索到的库链接到main.c中。
unset(LIB_SYST CACHE)
find_library(
LIB_SYST
NAMES libsyst.so
PATHS /usr/lib/syst
NO_DEFAULT_PATH
)
target_link_libraries(main.c ${LIB_SYST})
find_package与find_library有类似的功能,使用的场景略有不同,find_library主要用于查找单个库文件。find_package用于查找复杂的第三方软件包,这些软件包通常包含多个库和头文件。