CMAKE_PROJECT_NAME和PROJECT_NAME有什么区别?
来自文档:
当前项目的名称。
这是从最接近的继承的project()命令指定当前项目的名称。
项目命令的项目名称。
这是最近的project()命令的名称。
我不明白其中的区别。
我应该何时使用CMAKE_PROJECT_NAME
?我什么时候应该使用PROJECT_NAME
?
答案 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
的值。