Эта страница содержит хорошее резюме переменных, которые CMake уже определяет для нас. Я чувствую, что некоторые переменные одинаковы. Например, пример CMAKE_SOURCE_DIR
и PROJECT_SOURCE_DIR
. Они одинаковы, ссылаясь на папку, где определен CMakeLists.txt верхнего уровня. Поэтому мой вопрос: есть ли между ними тонкая разница? Благодарю.
Являются ли CMAKE_SOURCE_DIR и PROJECT_SOURCE_DIR одинаковыми в CMake?
Ответ 1
Существует разница между этими переменными. CMAKE_SOURCE_DIR
действительно относится к папке, где определен CMakeLists.txt верхнего уровня. Однако PROJECT_SOURCE_DIR
относится к папке CMakeLists.txt, содержащей самую последнюю команду project()
.
Например, скажем, у вас есть проект верхнего уровня под названием Outer
, и он содержит подкаталог с собственным проектом под названием Inner
. Outer
CMakeLists.txt имеет:
project(Outer)
add_subdirectory(Inner)
и Inner
's:
project(Inner)
Затем в обоих этих файлах CMakeLists CMAKE_SOURCE_DIR
будет ссылаться на Outer
source dir. Но в то время как PROJECT_SOURCE_DIR
для Outer
также является тем же самым dir, это не относится к Inner
. Inner
PROJECT_SOURCE_DIR
- это подкаталог, содержащий его CMakeLists.txt.
Это различие относится ко всем переменным PROJECT_<var>
vs CMAKE_<var>
.