Mastering Cmake Pdf [updated] Guide
"version": 3, "configurePresets": [ "name": "debug", "displayName": "Debug", "generator": "Ninja", "binaryDir": "$sourceDir/build/debug", "cacheVariables": "CMAKE_BUILD_TYPE": "Debug", "BUILD_TESTS": "ON" , "name": "release", "inherits": "debug", "displayName": "Release", "binaryDir": "$sourceDir/build/release", "cacheVariables": "CMAKE_BUILD_TYPE": "Release" ], "buildPresets": [ "name": "debug", "configurePreset": "debug" , "name": "release", "configurePreset": "release" ]
add_library(math STATIC add.cpp multiply.cpp) target_include_directories(math PUBLIC $CMAKE_CURRENT_SOURCE_DIR/include) target_compile_features(math PUBLIC cxx_std_17) option(BUILD_MATH_EXAMPLES "Build math examples" OFF) if(BUILD_MATH_EXAMPLES) add_executable(calc_example examples/calc.cpp) target_link_libraries(calc_example PRIVATE math) endif() mastering cmake pdf
install(FILES "$CMAKE_CURRENT_BINARY_DIR/MyProjectConfigVersion.cmake" DESTINATION lib/cmake/MyProject ) CMake’s built-in testing is trivial to use: "configurePresets": [ "name": "debug"
add_custom_command( OUTPUT $CMAKE_CURRENT_BINARY_DIR/version.h COMMAND $CMAKE_COMMAND -DVERSION=$PROJECT_VERSION -P write_version.cmake DEPENDS write_version.cmake COMMENT "Generating version.h" ) add_custom_target(generate_version DEPENDS $CMAKE_CURRENT_BINARY_DIR/version.h) add_dependencies(my_app generate_version) toolchain_arm.cmake : "cacheVariables": "CMAKE_BUILD_TYPE": "Debug"
add_executable(my_app main.cpp) target_include_directories(my_app PRIVATE include) target_link_directories(my_app PRIVATE /custom/lib) Why? Target properties don’t pollute sibling directories or subprojects. | Modifier | Effect | |------------|-------------------------------------------------------------------------| | PRIVATE | Used only by this target, not by dependents (e.g., internal .cpp includes) | | PUBLIC | Used by this target and all dependents (e.g., header include dirs) | | INTERFACE | Used only by dependents, not by this target (e.g., header-only libs) |


