cmake find_package

参考:

使用

通过find_package命令,可以找到三方库对应的头文件路径和库文件路径,不用手动管理这些路径了。例如要引用CURL库,在CMakeLists文件可以简单写成下面的形式

1
2
3
4
5
6
7
8
find_package(CURL)
add_executable(curltest curltest.cc)
if(CURL_FOUND)
target_include_directories(clib PRIVATE ${CURL_INCLUDE_DIR})
target_link_libraries(curltest ${CURL_LIBRARY})
else(CURL_FOUND)
message(FATAL_ERROR ”CURL library not found”)
endif(CURL_FOUND)

原理

find_package 有两种搜索模式

Module mode

CMAKE_MODULE_PATH指定的路径下搜索名为Find<PackageName>.cmake的文件

该文件提供了库对应的头文件和库文件路径。

Config mode

  • 搜索<lowercasePackageName>-config.cmake或者<PackageName>Config.cmake

  • 搜索<lowercasePackageName>-config-version.cmake或者<PackageName>ConfigVersion.cmake

如果找到

  • <PackageName>_FOUND 为true

  • <PackageName>_INCLUDE_DIR 会被设置

  • <PackageName>_LIBRARY 会被设置

找不到

  • <PackageName>_FOUND 为false

如何写Find<PackageName>.cmake

wasmint/FindSDL2.cmake at master · WebAssembly/wasmint · GitHub

  1. 调用find_path找头文件路径

  2. 调用find_library找库的路径

  3. 通过FindPackageHandleStandardArgs导出变量

通过CMAKE_MODULE_PATH指定路径,就可以通过find_package命令使用该三方库的头文件和库文件了。


cmake find_package
https://yxibng.github.io/2022/03/13/cmake/2022-03-13-cmake find_package/
作者
yxibng
发布于
2022年3月13日
许可协议