2016-08-14 17 views
6

Czym różni się CMAKE_PROJECT_NAME od PROJECT_NAME?Różnica między CMAKE_PROJECT_NAME a PROJECT_NAME?

Z dokumentacji:

CMAKE_PROJECT_NAME

Nazwa bieżącego projektu.

Określa nazwę bieżącego projektu z najbliższej odziedziczonej komendy project().

PROJECT_NAME

Nazwa projektu przekazanego polecenia projektu.

Jest to nazwa nadana najnowszej komendzie projektu().

Nie rozumiem różnicy.

Kiedy należy używać CMAKE_PROJECT_NAME? Kiedy należy użyć PROJECT_NAME?

Odpowiedz

6

Z dokumentacji nie dostaję różnicy między dwiema zmiennymi.

Różnica polega na tym, że CMAKE_PROJECT_NAME to nazwa z ostatniego project rozmowy z CMakeLists.txt korzenia, natomiast PROJECT_NAME jest z ostatniego project rozmowy, niezależnie od lokalizacji pliku zawierającego polecenia.

Różnica jest rozpoznawalna na podstawie poniższego testu.

struktura pliku:

|-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}") 

Odpowiednie wyjście jest:

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

W podkatalogów, zawsze B jest wartością dla CMAKE_PROJECT_NAME.