使用 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})