2016-08-05 37 views
0

Ich weiß, Sie können CMake configure_file verwenden, um CMake-Variablen für Ihr Programm verfügbar machen. Zum Beispiel kann ichCMake: Legen Sie einen anderen Namen für # cmakedefine Variable

#define ${CMAKE_BUILD_TYPE} 

verwenden, was zu

#define Release 

jedoch zu meinem Code mehr readible zu halten, würde ich es vorziehen

#define BUILD_TYPE_RELEASE 

Gibt es eine einfache Art und Weise zu definieren, zu erreichen Dies?

Antwort

1

Dies ist eine ziemlich einfache Art und Weise zu lösen:

In CMakesLists.txt:

if (NOT CMAKE_BUILD_TYPE) 
    set (CMAKE_BUILD_TYPE Release) 
endif (NOT CMAKE_BUILD_TYPE) 

string (TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_NAME) 

configure_file (config.h.in config.h) 

Und in config.h.in:

#define BUILD_TYPE_${BUILD_TYPE_NAME} 

Ich bin aber nach wie vor gespannt, ob es liegt elegantere Lösung.

+0

Wie ist das besser lesbar? Gewöhnen Sie sich einfach an die '$ {}' Syntax oder verwenden Sie eine andere Sprache! – usr1234567

+0

@ usr1234567: 'Wie ist das lesbarer? - Besser lesbar als ** was **? Asker bietet keine Möglichkeit, dies zu tun (Wert der Variablen in Großbuchstaben umwandeln). Sein "besser lesbar" bezieht sich auf C- (oder C++ -) Code, der den konfigurierten Header verwendet, nicht auf das Skript * CMakeLists.txt *. – Tsyvarev

1

Dies ist eher eine Frage des bevorzugten Programmierstils (Konfigurationsdateien und Compiler-Definitionen).

In Ihrem Fall würde ich add_definitions() verwenden oder direkt ändern/anhängen COMPILE_DEFINITIONS Verzeichniseigenschaft (mit generator expressions unterstützt auch Multi-Konfiguration Umgebungen):

set_property(
    DIRECTORY 
    APPEND 
    PROPERTY 
     COMPILE_DEFINITIONS "BUILD_TYPE_$<UPPER_CASE:$<CONFIG>>" 
) 

meisten vereinfachte Debug/Release prüfen

Sie kann auch prüfen, welche Compiler-Definitionen CMake vordefiniert. Ohne etwas zu Ihrem CMakeLists.txt Dateien zu ändern/fügen Sie einfach für NDEBUG Definition überprüfen konnte (Satz für Release baut auf verschiedenen Plattformen) in Sie C/C++ Code:

#ifdef NDEBUG 
... 
#endif 

Referenzen