cmake-patternslisted
Install: claude install-skill Mattakushi432/Claude-Code-Skills-Custom-DevTools-Pack
# CMake Patterns
## Modern Target-Based CMake
```cmake
cmake_minimum_required(VERSION 3.25)
project(MyApp VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # for clangd/clang-tidy
# Library target
add_library(mylib STATIC
src/parser.cpp
src/network.cpp
)
target_include_directories(mylib PUBLIC include PRIVATE src)
target_compile_options(mylib PRIVATE -Wall -Wextra -Wpedantic)
target_compile_features(mylib PUBLIC cxx_std_23)
# Executable
add_executable(myapp src/main.cpp)
target_link_libraries(myapp PRIVATE mylib)
```
## find_package
```cmake
# Find system libraries
find_package(Threads REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(Boost 1.82 REQUIRED COMPONENTS filesystem program_options)
target_link_libraries(myapp PRIVATE
Threads::Threads
OpenSSL::SSL
OpenSSL::Crypto
Boost::filesystem
Boost::program_options
)
```
## FetchContent (Dependency Management)
```cmake
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.14.0
FIND_PACKAGE_ARGS NAMES GTest # use system install if available
)
FetchContent_Declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG v1.13.0
)
FetchContent_MakeAvailable(googletest spdlog)
target_link_libraries(mylib PRIVATE spdlog::spdlog)
target_link_libraries(tests PRIV