Mastering — Cmake Pdf
project/ ├── CMakeLists.txt (top-level) ├── cmake/ │ └── FindMyCustomLib.cmake ├── src/ │ ├── CMakeLists.txt │ └── app.cpp ├── libs/ │ ├── core/ │ │ ├── CMakeLists.txt │ │ └── core.cpp │ └── utils/ │ ├── CMakeLists.txt │ └── utils.h (header-only) └── tests/ ├── CMakeLists.txt └── test_core.cpp cmake_minimum_required(VERSION 3.20) project(MyProject VERSION 1.0.0 LANGUAGES CXX) Options option(BUILD_TESTS "Build unit tests" ON) option(BUILD_SHARED_LIBS "Build shared libs instead of static" OFF) Global settings set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) Add subdirectories add_subdirectory(libs/core) add_subdirectory(libs/utils) add_subdirectory(src)
#include <catch2/catch.hpp> #include "math/add.h" TEST_CASE("Addition works", "[math]") REQUIRE(add(2, 2) == 4); mastering cmake pdf
find_path(MyLib_INCLUDE_DIR mylib.h PATHS /usr/include /usr/local/include) find_library(MyLib_LIBRARY mylib PATHS /usr/lib /usr/local/lib) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MyLib DEFAULT_MSG MyLib_LIBRARY MyLib_INCLUDE_DIR) project/ ├── CMakeLists
Introduction CMake is the de facto standard build system generator for C and C++ projects. Unlike traditional build systems (Make, Ninja, Visual Studio), CMake doesn’t build your code directly. Instead, it generates platform-native build scripts that compile and link your software reliably across Linux, macOS, Windows, and embedded systems. #include "math/add.h" TEST_CASE("Addition works"
project/ ├── CMakeLists.txt (top-level) ├── cmake/ │ └── FindMyCustomLib.cmake ├── src/ │ ├── CMakeLists.txt │ └── app.cpp ├── libs/ │ ├── core/ │ │ ├── CMakeLists.txt │ │ └── core.cpp │ └── utils/ │ ├── CMakeLists.txt │ └── utils.h (header-only) └── tests/ ├── CMakeLists.txt └── test_core.cpp cmake_minimum_required(VERSION 3.20) project(MyProject VERSION 1.0.0 LANGUAGES CXX) Options option(BUILD_TESTS "Build unit tests" ON) option(BUILD_SHARED_LIBS "Build shared libs instead of static" OFF) Global settings set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) Add subdirectories add_subdirectory(libs/core) add_subdirectory(libs/utils) add_subdirectory(src)
#include <catch2/catch.hpp> #include "math/add.h" TEST_CASE("Addition works", "[math]") REQUIRE(add(2, 2) == 4);
find_path(MyLib_INCLUDE_DIR mylib.h PATHS /usr/include /usr/local/include) find_library(MyLib_LIBRARY mylib PATHS /usr/lib /usr/local/lib) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MyLib DEFAULT_MSG MyLib_LIBRARY MyLib_INCLUDE_DIR)
Introduction CMake is the de facto standard build system generator for C and C++ projects. Unlike traditional build systems (Make, Ninja, Visual Studio), CMake doesn’t build your code directly. Instead, it generates platform-native build scripts that compile and link your software reliably across Linux, macOS, Windows, and embedded systems.