使用 find package 和 Findpackage.cmake 模块

使用 CMake 查找已安装软件包的默认方法是将 find_package 函数与 Find<package>.cmake 文件结合使用。该文件的目的是定义包的搜索规则并设置不同的变量,例如 <package>_FOUND<package>_INCLUDE_DIRS<package>_LIBRARIES

CMake 中默认定义了许多 Find<package>.cmake 文件。但是,如果你需要的软件包没有文件,你可以随时编写自己的文件并将其放在 ${CMAKE_SOURCE_DIR}/cmake/modules(或任何其他目录中,如果 CMAKE_MODULE_PATH 被覆盖)

可以在手册(v3.6)中找到默认模块列表。必须根据项目中使用的 CMake 版本检查手册,否则可能会丢失模块。也可以使用 cmake --help-module-list 找到已安装的模块。

对于 Github 上的 FindSDL2.cmake 有一个很好的例子

这是一个需要 SDL2 的基本知识:

cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")

set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(SDL2 REQUIRED)

include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})