- 1. CMakeLists.txt
- 2. config.h.in
- 3. main.cpp
- 4. Programmausgabe
- 5. AKTUALISIERT
Ich schlage vor, die Option in Erwägung zu ziehen, in der Datei CMakeLists.txt deklarierte Variablen in C++-Code zu verwenden.
Für den Anfang, wofür ist es? Möchten Sie beispielsweise die Programmversion und einige andere Zusatzinformationen angeben, die beim Erstellen des Programms festgelegt werden, aber Sie möchten diese Informationen auch in Ihrem C++-Code verwenden? Ist dies möglich? Gehen Sie beispielsweise wie im Bild gezeigt vor.
CMakeLists.txt
Das Hinzufügen solcher Variablen kann implementiert werden, indem eine Konfigurationsdatei mit der Erweiterung h.in erstellt wird, in der define -Direktiven definiert werden, denen Konstanten aus CMakeLists.txt in C++ hinzugefügt werden . In diesem Fall wird die entsprechende Header-Datei generiert.
cmake_minimum_required (VERSION 3.8) project (VariablesProject) # Add the variables we need set (VERSION_MAJOR 0) set (VERSION_MINOR 1) set (VERSION_PATCH 0) set (SOFT_VERSION $ {VERSION_MAJOR}. $ {VERSION_MINOR}. $ {VERSION_PATCH}) # Specify the configuration file from which the header file will be generated configure_file (config.h.in config.h @ONLY) add_executable ($ {PROJECT_NAME} main.cpp) # add a directory with header files to see the generated file include_directories ($ {CMAKE_CURRENT_BINARY_DIR})
config.h.in
Die Konfigurationsdatei, aus der die Header-Datei config.h generiert wird.
#ifndef CONFIG_H_IN #define CONFIG_H_IN #define PROJECT_NAME @ PROJECT_NAME @ #define VERSION_MAJOR "@ VERSION_MAJOR @" #define VERSION_MINOR "@ VERSION_MINOR @" #define VERSION_PATCH "@ VERSION_PATCH @" #define SOFT_VERSION "@ SOFT_VERSION @" #endif // CONFIG_H_IN
main.cpp
#include <iostream> #include "config.h" // Add an automatically generated configuration file int main () { // Use variables from CMakeLists.txt std :: cout << "project name:" << PROJECT_NAME << std :: endl; std :: cout << "version:" << SOFT_VERSION << std :: endl; std :: cout << "version major:" << VERSION_MAJOR << std :: endl; std :: cout << "version minor:" << VERSION_MINOR << std :: endl; std :: cout << "version patch:" << VERSION_PATCH << std :: endl; return 0; }
Programmausgabe
Als Ergebnis erhalten wir die folgende Ausgabe in der Konsole.
project name: VariablesProject version: 0.1.0 version major: 0 version minor: 1 version patch: 0
AKTUALISIERT
Die Datei config.h wird im Build-Verzeichnis generiert, wenn Sie sie im Quellverzeichnis erstellen möchten, schreiben Sie dies
configure_file(config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h @ONLY)