Comments

# This is a comment

Keywords

add_library(foo main.cpp)
target_link_libraries(foo bar)

Functions

user_defined_function()
another_custom_function(argument)

Variables

CMAKE_COMPILER_IS_GNUG77
CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY
CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_WHATEVER
CMAKE_CONFIGURATION_TYPES
CMAKE_CPACK_COMMAND
CMAKE_CROSSCOMPILING
CMAKE_CROSSCOMPILING_EMULATOR
CMAKE_CTEST_COMMAND
CMAKE_CUDA_EXTENSIONS
CMAKE_CUDA_HOST_COMPILER
CMAKE_CUDA_SEPARABLE_COMPILATION
CMAKE_CUDA_STANDARD
CMAKE_CUDA_STANDARD_REQUIRED
"${INSIDE_STRING}"
"${PROPER}chaining${VARIABLES}"

Properties

CUDA_STANDARD
CUDA_STANDARD_REQUIRED
CXX_EXTENSIONS
CXX_STANDARD
cxx_std_17
cxx_variadic_templates

Strings

"A string"
    "A multi
    line
    string"
    "A ${VARIABLE} insde a string"

Full example

cmake_minimum_required(VERSION 3.13)

project(crypto)

add_library(base INTERFACE)
target_compile_features(base INTERFACE
    cxx_std_17
    )

add_subdirectory(helpers)
add_subdirectory(msg)

add_library(analyzers-obj OBJECT
    CryptoAnalyzer.cpp
    )

target_include_directories(analyzers-obj
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}
    )

find_package(predi REQUIRED)
target_link_libraries(analyzers-obj
    PUBLIC
        base
        predi::predi
        crypto::helpers
    )

set_target_properties(analyzers-obj
    PROPERTIES
        POSITION_INDEPENDENT_CODE ON
    )

add_library(analyzers SHARED
    $<TARGET_OBJECTS:analyzers-obj>
    )

target_link_libraries(analyzers PUBLIC analyzers-obj)

add_executable(crypto
    main.cpp
    )

target_link_libraries(crypto
    PUBLIC
        analyzers
    PRIVATE
        base
        messages
    )

enable_testing()
add_subdirectory(tests)