cmake
Utilizzo di CMake per configurare i tag preproprocessore
Ricerca…
introduzione
L'uso di CMake in un progetto C ++ se usato correttamente può consentire al programmatore di concentrarsi meno sulla piattaforma, sul numero di versione del programma e altro sul programma stesso. Con CMake è possibile definire i tag del preprocessore che consentono di verificare facilmente la piattaforma o qualsiasi altro tag del preprocessore che potrebbe essere necessario nel programma effettivo. Come il numero di versione che potrebbe essere sfruttato in un sistema di log.
Sintassi
- #define preprocessor_name "@ cmake_value @"
Osservazioni
È importante capire che non tutti i preprocessori dovrebbero essere definiti in config.h.in
. I tag del preprocessore sono generalmente utilizzati solo per semplificare la vita dei programmatori e dovrebbero essere utilizzati con discrezione. Dovresti cercare se esiste già un tag per il preprocessore prima di definirlo in quanto potresti imbatterti in comportamenti non definiti su sistemi diversi.
Utilizzo di CMake per definire il numero di versione per l'utilizzo di C ++
Le possibilità sono infinite. come puoi usare questo concetto per estrarre il numero di versione dal tuo sistema di compilazione; come git e usa quel numero di versione nel tuo progetto.
CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(project_name VERSION "0.0.0")
configure_file(${path to configure file 'config.h.in'}
include_directories(${PROJECT_BINARY_BIN}) // this allows the 'config.h' file to be used throughout the program
...
config.h.in
#ifndef INCLUDE_GUARD
#define INCLUDE_GUARD
#define PROJECT_NAME "@PROJECT_NAME@"
#define PROJECT_VER "@PROJECT_VERSION@"
#define PROJECT_VER_MAJOR "@PROJECT_VERSION_MAJOR@"
#define PROJECT_VER_MINOR "@PROJECT_VERSION_MINOR@"
#define PTOJECT_VER_PATCH "@PROJECT_VERSION_PATCH@"
#endif // INCLUDE_GUARD
main.cpp
#include <iostream>
#include "config.h"
int main()
{
std::cout << "project name: " << PROJECT_NAME << " version: " << PROJECT_VER << std::endl;
return 0;
}
produzione
project name: project_name version: 0.0.0