0
点赞
收藏
分享

微信扫一扫

CMake引入第三方库的方法小结

小_北_爸 2023-06-02 阅读 100

(目录)

一、find_package引入

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(FindLibInCmake)
add_executable(main.out src/main.cpp)

find_package(SDL2 REQUIRED)
target_link_libraries(main.out PRIVATE SDL2::SDL2)

二、pkg-config引入

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(FindLibInCmake)
add_executable(main.out src/main.cpp)

# PkgConfig模块是CMake自带的
find_package(PkgConfig REQUIRED)
# IMPORTED_TARGET:将pkg-config找到的库自动导入为TARGET
pkg_check_moduLes(SDL2 sdl2 REQUIRED IMPORTED_TARGET)
target_link_libraries(main.out PRIVATE PkgConfig::SDL2)

三、git工程引入

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(FindLibInCmake)
add_executable(main.out src/main.cpp)

$[[
    git init
    git submodule add https://github.com/libsdl-org/SDL.git 3rdpart/SDL
]]

# 构建CMake子项目
add_subdirectory(3rdpart/SDL)
target_link_libraries(main.out PRIVATE SDL2::SDL2)

四、头文件+库文件(.h + lib)引入

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(FindLibInCmake)
add_executable(main.out src/main.cpp)

include(cmake/FindSDL2.cmake)
target_link_libraries(main.out PRIVATE SDL2::SDL2)

==============================================================

# cmake/FindSDL2.cmake
find_path(SDL2_HEADER_PATH SDL.h PATHS 3rdlib/SDL2/include/SDL2 REQUIRED)
find_path(SDL2_LIB_PATH libSDL2.a PATHS 3rdlib/SDL2/lib REQUIRED)

# 可以在cmake-gui及ccmake中配置
#set(SDL2_HEADER_PATH "${CMAKE_SOURCE_DIR}/3rdlib/SDL2/include/SDL2" CACHE STRING "SDL2 include Path")
#set(SDL2_LIB_PATH "${CMAKE_SOURCE_DIR}/3rdlib/SDL2/lib" CACHE STRING "SDL2 lib Path")

message(STATUS "include dir: ${SDL2_HEADER_PATH}")
message(STATUS "lib dir: ${SDL2_LIB_PATH}")

# INTERFACE:外部库,无需编译;IMPORTED:将编译好的库导入成TARGET
add_library(SDL2::SDL2 INTERFACE IMPORTED)

set_target_properties(
    SDL2::SDL2
    PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${SDL2_HEADER_PATH}"
        INTERFACE_LINK_LIBRARIES "-L${SDL2_LIB_PATH} -lmingw32 -lSDL2main -lSDL2 -mwindows" # -mwindows指出平台依赖
        IMPORTED_LINK_INTERFACE_LANGUAGES "C" # 因为导入的是C库
)

五、编译命令

#cmake -S . -B build -G"MinGW Makefiles" -DSDL2_HEADER_PATH=/usr/local/include
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j2
举报

相关推荐

0 条评论