If we have a c++ project that uses a config.h configuration file with some custom paths or variables, we can generate it using CMake and a generic file config.h.in.
The config.h.in can be part of a git repository, while the generated file config.h will never be added, as it is generated from the current environment.
#CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
SET(PROJ_NAME "myproject")
PROJECT(${PROJ_NAME})
SET(${PROJ_NAME}_DATA "" CACHE PATH "This directory contains all DATA and RESOURCES")
SET(THIRDPARTIES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../thirdparties CACHE PATH "This directory contains thirdparties")
configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/common/config.h.in"
"${CMAKE_CURRENT_SOURCE_DIR}/include/config.h" )
If we have a config.h.in like this:
cmakedefine PATH_DATA "@myproject_DATA@"
cmakedefine THIRDPARTIES_PATH "@THIRDPARTIES_PATH@"
The previous CMakeLists will generate a c++ header like this:
#define PATH_DATA "/home/user/projects/myproject/data"
#define THIRDPARTIES_PATH "/home/user/projects/myproject/thirdparties"