Buscar..


Introducción

El uso de CMake en un proyecto de C ++ si se usa correctamente puede permitir que el programador se centre menos en la plataforma, el número de versión del programa y más en el programa en sí. Con CMake puede definir etiquetas de preprocesador que permiten verificar fácilmente qué plataforma o cualquier otra etiqueta de preprocesador que pueda necesitar en el programa real. Como el número de versión que podría ser aprovechado en un sistema de registro.

Sintaxis

  • #define preprocessor_name "@ cmake_value @"

Observaciones

Es importante comprender que no todos los preprocesadores deben definirse en la config.h.in . Las etiquetas de preprocesador se usan generalmente solo para facilitar la vida de los programadores y deben usarse con discreción. Debería investigar si ya existe una etiqueta de preprocesador antes de definirla, ya que puede encontrarse con un comportamiento indefinido en un sistema diferente.

Usando CMake para definir el número de versión para el uso de C ++

Las posibilidades son infinitas. ya que puede utilizar este concepto para extraer el número de versión de su sistema de compilación; como git y usa ese número de versión en tu proyecto.

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;
}

salida

project name: project_name version: 0.0.0


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow