Разница между именем проекта CMAKE и именем проекта?

в чем разница между CMAKE_PROJECT_NAME и PROJECT_NAME?

из документации:

CMAKE_PROJECT_NAME

имя текущего проекта.

указывает имя текущего проекта из ближайшей унаследованной команды project ().

имя_проекта

имя проекта в команду проекта.

Это имя, данное последней команде project ().

Я не понимаю разницы.

когда я должен использовать CMAKE_PROJECT_NAME? Когда я должен использовать PROJECT_NAME?

1 ответов


из документации, я не понимаю разницы между двумя переменными.

разница в том, что CMAKE_PROJECT_NAME - это имя последнего project вызов из корневых CMakeLists.тхт, в то время как PROJECT_NAME из последнего project вызов, независимо от местоположения файла, содержащего команду.

разница узнаваема из следующего теста.

структура:
|-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}")

соответствующие выход:

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

в подкаталогах всегда B является значением для CMAKE_PROJECT_NAME.