2016-08-14 4 views
6

Was ist der Unterschied zwischen CMAKE_PROJECT_NAME und PROJECT_NAME?Unterschied zwischen CMAKE_PROJECT_NAME und PROJECT_NAME?

Aus der Dokumentation:

CMAKE_PROJECT_NAME

Der Name des aktuellen Projekts.

Dies gibt den Namen des aktuellen Projekts aus dem nächsten geerbten Projekt() - Befehl an.

PROJECT_NAME

Name des für das Projekt Befehl gegeben Projektes.

Dies ist der Name des letzten Befehls project().

Ich verstehe den Unterschied nicht.

Wann sollte ich CMAKE_PROJECT_NAME verwenden? Wann sollte ich PROJECT_NAME verwenden?

Antwort

6

Aus der Dokumentation, bekomme ich nicht den Unterschied zwischen den beiden Variablen.

Der Unterschied besteht darin, dass CMAKE_PROJECT_NAME ist der Name von dem letzten Aufruf project von der Wurzel CMakeLists.txt, während PROJECT_NAME vom letzten project Anruf ist, und zwar unabhängig von der Position der Datei des Befehl enthält.

Der Unterschied ist aus dem folgenden Test erkennbar.

Dateistruktur:

|-CMakeLists.txt 
\-test2 
    |-CMakeLists.txt 
    \-test3 
    \-CMakeLists.txt 

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0) 
project(A) 
message("< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 
project(B) 
message("< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 
add_subdirectory(test2) 
message("< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 
project(C) 
message("< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 

test2/CMakeLists.txt:

project(D) 
message("<< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 
add_subdirectory(test3) 
project(E) 
message("<< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 

test2/test3/CMakeLists.txt:

project(F) 
message("<<< ${CMAKE_PROJECT_NAME}/${PROJECT_NAME}") 

Die entsprechende Ausgabe lautet:

< A/A 
< B/B 
<< B/D 
<<< B/F 
<< B/E 
< B/B 
< C/C 

In den Unterverzeichnissen, immer B der Wert für CMAKE_PROJECT_NAME ist.