CMAKE_PROJECT_NAME和PROJECT_NAME之间的区别?

时间:2016-08-14 01:04:52

标签: cmake

CMAKE_PROJECT_NAME和PROJECT_NAME有什么区别?

来自文档:

CMAKE_PROJECT_NAME

  

当前项目的名称。

     

这是从最接近的继承的project()命令指定当前项目的名称。

PROJECT_NAME

  

项目命令的项目名称。

     

这是最近的project()命令的名称。

我不明白其中的区别。

我应该何时使用CMAKE_PROJECT_NAME?我什么时候应该使用PROJECT_NAME

1 个答案:

答案 0 :(得分:16)

从文档中,我没有区分这两个变量。

区别在于CMAKE_PROJECT_NAME是来自根CMakeLists.txt的上一次project来电的名称,而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的值。