Cmake is a Makefile generator.
It expects a configuration file named CMakeLists.txt at the root directory. We need to create a ephemeral directory (i.e. not to be committed), e.g. build/:
cd <project root>
mkdir build
cd build
cmake ..This will not compile the code, but it does a bunch of checks, such as whether the listed files exist. It will generate the Makefile which we can then use to compile the code:
makeTemplate:
cmake_minimum_required(VERSION 3.15...3.30)
project(
PetProject
VERSION 1.0
DESCRIPTION "My pet project"
LANGUAGES CXX
)
add_library(mylib STATIC lib.cpp lib.h)
add_executable(binary main.cpp)
target_link_libraries(
binary PRIVATE
mylib1
mylib2
)Equivalent to -std=20 in gcc/llvm.
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)set(CMAKE_BUILD_TYPE Debug)make subcommandmake run:
add_custom_target(run
COMMAND binary # i.e. ./binary
DEPENDS binary # target name
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "runs binary"
)Set:
set(MY_VAR "value")Read:
set(MY_VAR "lib")
add_library(mylib STATIC ${MY_VAR}.cpp ${MY_VAR}.h)List type:
set(MY_VAR_LIST "v1" "v2")
# equivalent to
set(MY_VAR_LIST "v1;v2")