Custom module path

  • The current project has custom CMake modules under cmake_modules/

Append the path in the top-level CMakeLists.txt:

list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules")

Out-of-Tree Sub-Projects

  • myLib is out-of-tree library source with its own CMakeLists.txt
  • we want to build and link against the out-of-tree library

Instruct CMake to build the external library beneath the current binary dir explicitly:

add_subdirectory (${OUT_OF_TREE_DIR}/myLib ${CMAKE_CURRENT_BINARY_DIR}/myLib)

MSVC static runtime definitions

  • MSVC projects require linking against specific versions of runtime libraries

Override CMAKE_C_FLAGS_*:

set(CMAKE_C_FLAGS_DEBUG "/MTd")
set(CMAKE_C_FLAGS_RELEASE "/MT")

Arch-specific Files

  • Architecture-specific C implementation files in src/$ARCH/*.c

Define TARGET_BUILD_PLATFORM=[linux|win32|...]. Include glob:

file(GLOB PLATFORM_CSRCS ${TARGET_BUILD_PLATFORM}/*.c)

Group files in MSVC projects

source_group(Groupname FILES ${PLATFORM_CSRCS})

Custom Cross-compiler Toolchain

  • Seems to require overriding tool invocation commands within the Toolchain file
  • For compilers that don't include their system include files automatically, a platform .cmake file is useful
    • Seems this has to live in the CMake install tree (is there a better way?)