Suche…


Einführung

Die korrekte Verwendung von CMake in einem C ++ - Projekt kann es dem Programmierer ermöglichen, sich weniger auf die Plattform, die Programmversionsnummer und mehr auf das eigentliche Programm selbst zu konzentrieren. Mit CMake können Sie Präprozessor-Tags definieren, die eine einfache Überprüfung der Plattform oder anderer Präprozessor-Tags ermöglichen, die Sie im aktuellen Programm benötigen. Wie die Versionsnummer, die in einem Protokollsystem verwendet werden könnte.

Syntax

  • #define preprocessor_name "@ cmake_value @"

Bemerkungen

Es ist wichtig zu verstehen, dass nicht jeder Präprozessor in der config.h.in definiert sein config.h.in . Präprozessor-Tags werden im Allgemeinen nur verwendet, um den Programmierern das Leben zu erleichtern, und sollten mit Diskretion verwendet werden. Sie sollten prüfen, ob bereits ein Präprozessor-Tag vorhanden ist, bevor Sie ihn definieren, da Sie auf anderen Systemen undefiniertes Verhalten feststellen können.

Verwenden von CMake zum Definieren der Versionsnummer für die Verwendung von C ++

Die Möglichkeiten sind endlos. Sie können dieses Konzept verwenden, um die Versionsnummer von Ihrem Build-System abzurufen. wie git und verwenden Sie diese Versionsnummer in Ihrem Projekt.

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

Ausgabe

project name: project_name version: 0.0.0


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow