From c660b71b9689af89bc09671e6a6de7f9943e2709 Mon Sep 17 00:00:00 2001 From: Johannes Stoelp Date: Sat, 6 Apr 2024 01:16:01 +0200 Subject: cmake: freq vars + module example --- src/development/cmake.md | 33 ++++++++++++++++++++++++ src/development/cmake/module/.gitignore | 1 + src/development/cmake/module/CMakeLists.txt | 27 +++++++++++++++++++ src/development/cmake/module/Makefile | 14 ++++++++++ src/development/cmake/module/bar/BarConfig.cmake | 1 + src/development/cmake/module/bar/FindBar.cmake | 2 ++ src/development/cmake/module/cmake/moose.cmake | 7 +++++ src/development/cmake/module/foo/FindFoo.cmake | 2 ++ src/development/cmake/module/foo/FooConfig.cmake | 1 + 9 files changed, 88 insertions(+) create mode 100644 src/development/cmake/module/.gitignore create mode 100644 src/development/cmake/module/CMakeLists.txt create mode 100644 src/development/cmake/module/Makefile create mode 100644 src/development/cmake/module/bar/BarConfig.cmake create mode 100644 src/development/cmake/module/bar/FindBar.cmake create mode 100644 src/development/cmake/module/cmake/moose.cmake create mode 100644 src/development/cmake/module/foo/FindFoo.cmake create mode 100644 src/development/cmake/module/foo/FooConfig.cmake (limited to 'src/development') diff --git a/src/development/cmake.md b/src/development/cmake.md index acf2d6b..e8f9430 100644 --- a/src/development/cmake.md +++ b/src/development/cmake.md @@ -1,5 +1,20 @@ # cmake(1) +## Frequently used variables +``` +# Install location. +CMAKE_INSTALL_PREFIX= + +# Generate compile_commands.json? +CMAKE_EXPORT_COMPILE_COMMANDS={0,1} + +# Project build type. +CMAKE_BUILD_TYPE={Debug, Release, RelWithDebInfo, MinSizeRel} + +# C++ standard. +CMAKE_CXX_STANDARD={14,17,..} +``` + ## `PRIVATE` / `PUBLIC` / `INTERFACE` These modifier control where properties for a given target are visible. @@ -38,3 +53,21 @@ target_link_libraries(main liba) [3/4] /usr/bin/c++ -DDEF_INTERFACE -DDEF_PUBLIC [..] .../main.cc [4/4] [..] ``` + +## `find_package` [[ref][cmake-find_package]] +A small example to play with can be found in [cmake/module][src-module]. + +```cmake +find_package(Name MODULE) +``` +Looks for `FindName.cmake` in paths given by `CMAKE_MODULE_PATH` and then builtin paths. + +```cmake +find_package(Name CONFIG) +``` +Looks for `name-config.cmake` or `NameConfig.cmake` in paths given by +`CMAKE_PREFIX_PATH`, or path given by `Name_DIR` and then builtin paths. + +[cmake-include]: https://cmake.org/cmake/help/latest/command/include.html +[cmake-find_package]: https://cmake.org/cmake/help/latest/command/find_package.html +[src-module]: https://github.com/johannst/notes/tree/master/src/development/cmake/module diff --git a/src/development/cmake/module/.gitignore b/src/development/cmake/module/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/src/development/cmake/module/.gitignore @@ -0,0 +1 @@ +build diff --git a/src/development/cmake/module/CMakeLists.txt b/src/development/cmake/module/CMakeLists.txt new file mode 100644 index 0000000..f52d282 --- /dev/null +++ b/src/development/cmake/module/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.10) +project(hello-pkg) + +# Include as file. +include(cmake/moose.cmake) +# Include as module (search CMAKE_MODULE_PATH, then builtin paths). +include(moose) + +# -- Foo package --------------------------------------------------------------- + +# Find module (uses CMAKE_MODULE_PATH, Foo_DIR, builtin paths). +message("==> find_package(Foo MODULE)") +find_package(Foo MODULE) + +# Find config (uses CMAKE_PREFIX_PATH, Foo_DIR, builtin paths). +message("==> find_package(Foo CONFIG)") +find_package(Foo CONFIG REQUIRED) + +# -- Bar package --------------------------------------------------------------- + +# Find module (uses CMAKE_MODULE_PATH, Bar_DIR, builtin paths). +message("==> find_package(Bar MODULE)") +find_package(Bar MODULE) + +# Find config (uses CMAKE_PREFIX_PATH, Bar_DIR, builtin paths). +message("==> find_package(Bar CONFIG)") +find_package(Bar CONFIG REQUIRED) diff --git a/src/development/cmake/module/Makefile b/src/development/cmake/module/Makefile new file mode 100644 index 0000000..39f0389 --- /dev/null +++ b/src/development/cmake/module/Makefile @@ -0,0 +1,14 @@ +DBG ?= n +CMAKE_DBG-y = -DCMAKE_FIND_DEBUG_MODE=1 + +all: + @# CMAKE_MODULE_PATH for include() and find_package module flows. + @# CMAKE_PREFIX_PATH for find_package config flow. + @# Bar_DIR package specific for find_package config flow. + cmake . -B build -DCMAKE_MODULE_PATH="cmake;foo;bar" -DCMAKE_PREFIX_PATH="foo" -DBar_DIR=bar $(CMAKE_DBG-$(DBG)) + +debug: + $(MAKE) all DBG=y + +clean: + $(RM) -r build diff --git a/src/development/cmake/module/bar/BarConfig.cmake b/src/development/cmake/module/bar/BarConfig.cmake new file mode 100644 index 0000000..d5164cf --- /dev/null +++ b/src/development/cmake/module/bar/BarConfig.cmake @@ -0,0 +1 @@ +message("BarConfig invoked") diff --git a/src/development/cmake/module/bar/FindBar.cmake b/src/development/cmake/module/bar/FindBar.cmake new file mode 100644 index 0000000..f2047ea --- /dev/null +++ b/src/development/cmake/module/bar/FindBar.cmake @@ -0,0 +1,2 @@ +message("FindBar invoked") +set(Bar_FOUND 1) diff --git a/src/development/cmake/module/cmake/moose.cmake b/src/development/cmake/module/cmake/moose.cmake new file mode 100644 index 0000000..3052671 --- /dev/null +++ b/src/development/cmake/module/cmake/moose.cmake @@ -0,0 +1,7 @@ +# Add include guard with the scope of the includers directory downwards. +#include_guard(DIRECTORY) + +# Add global include guard (whole build). +#include_guard(GLOBAL) + +message("moose invoked") diff --git a/src/development/cmake/module/foo/FindFoo.cmake b/src/development/cmake/module/foo/FindFoo.cmake new file mode 100644 index 0000000..0653bb8 --- /dev/null +++ b/src/development/cmake/module/foo/FindFoo.cmake @@ -0,0 +1,2 @@ +message("FindFoo invoked") +set(Foo_FOUND 1) diff --git a/src/development/cmake/module/foo/FooConfig.cmake b/src/development/cmake/module/foo/FooConfig.cmake new file mode 100644 index 0000000..a575ef2 --- /dev/null +++ b/src/development/cmake/module/foo/FooConfig.cmake @@ -0,0 +1 @@ +message("FooConfig invoked") -- cgit v1.2.3