13.1. CMake Style Guide#
13.1.1. General#
To put in in one sentence: be as careful when writing the CMake files as when you are writing C++ code.
13.1.2. Indentation#
Indent all code correctly, i.e. the body of
if/else/endif
foreach/endforeach
while/endwhile
macro/endmacro
function/endfunction
Use spaces for indenting, 4 spaces preferably. Use the same amount of spaces for indenting as is used in the rest of the file. Do not use tabs.
13.1.3. Naming#
Functions: lower_case name. Ex:
do_something(...)
Local variables: lower_case name. Local variables are used exclusively inside the file that contained them, and their values were simply passed as parameters to CMake functions. Ex:
set(some_variable "...")
Global variables: UPPER_CASE name. Global variables (can also be called “export variables”) are intended for exporting up/down-stream via the environment variable mechanism. Ex:
set(SOME_VARIABLE "..." CACHE ...)
Control statements: lower_case name without repeat the condition in the closing brackets. Ex:
if(condition)
...
else() # not repeat condition
...
endif() # not repeat condition
Operators: UPPER_CASE name. Ex:
if(condition STREQUAL "")
Directives and/or extra options: UPPER_CASE name. Ex:
do_something(... USE_THIS)
file(COPY ...)
13.1.4. End commands#
To make the code easier to read, use empty commands for endforeach(), endif(), endfunction(), endmacro() and endwhile(). Also, use empty else() commands.
For example, do this:
if(FOOVAR)
some_command(...)
else()
another_command(...)
endif()
and not this:
if(BARVAR)
some_other_command(...)
endif(BARVAR)
13.1.5. Examples#
An real-world example:
function(set_platform system_name)
if(${system_name} MATCHES "Darwin")
set(PLATFORM "darwin")
elseif(${system_name} MATCHES "Linux")
set(PLATFORM "linux")
else()
set(PLATFORM "")
endif()
endfunction()
cmake_minimum_required(VERSION 3.0)
set_platform(${CMAKE_SYSTEM_NAME})
13.1.6. References#
This style guide is mainly taken from