[CMake] Lire un fichier de configuration.
L’idée est de générer des variables pointant sur des valeurs à partir d’un fichier texte au format .cfg/.ini.
Voici un exemple de fichier de configuration:
[python]
ma_python_path = /home/toto/dependencies/venv/bin/python3.9
ma_python_dll_path = /home/toto/dependencies/venv/lib
ma_python_dll_name = libpython3.9.so
[wx]
ma_wxpython_path = /home/toto/dependencies/wxPython
ma_wx_minor_version = 1
ma_wx_so_suffix = .so.5
Voici le script CMake qui permet de parser et de générer les variables contenu dans le fichier de configuration.
set (MA_DEPENDENCIES_DIR "${PROJECT_SOURCE_DIR}/../dependencies/")
set (MA_DEPENDENCIES_CFG_PATH "${MA_DEPENDENCIES_DIR}/dependencies.cfg")
file(STRINGS ${MA_DEPENDENCIES_CFG_PATH} MA_DEPENDENCIES_CFG_LINES)
macro(set_var _NAME _VALUE)
set(${_NAME} "${_VALUE}")
endmacro()
foreach (_variableName ${MA_DEPENDENCIES_CFG_LINES})
string(FIND "${_variableName}" "[" _FIND_GROUP)
if(${_FIND_GROUP} EQUAL -1)
string(FIND "${_variableName}" "=" _FIND_EQUAL)
if(NOT ${_FIND_EQUAL} EQUAL -1)
string(LENGTH "${_variableName}" _LENGTH)
# La clef
string(SUBSTRING "${_variableName}" 0 ${_FIND_EQUAL} _KEY)
string(STRIP "${_KEY}" _KEY)
string(TOUPPER "${_KEY}" _KEY)
# La valeur
math(EXPR _LENGTH "${_LENGTH} + 1" OUTPUT_FORMAT DECIMAL)
string(SUBSTRING "${_variableName}" ${_FIND_EQUAL} ${_LENGTH} _VALUE)
string(REPLACE "=" "" _VALUE "${_VALUE}")
string(STRIP "${_VALUE}" _VALUE)
set_var(${_KEY} ${_VALUE})
#message("${_KEY}:${_VALUE}")
endif()
endif()
endforeach()
# on vérifie que l'une des variables du fichier de configurtion est accecible
message("${MA_PYTHON_PATH}")