Подтвердить что ты не робот

Являются ли CMAKE_SOURCE_DIR и PROJECT_SOURCE_DIR одинаковыми в CMake?

Эта страница содержит хорошее резюме переменных, которые CMake уже определяет для нас. Я чувствую, что некоторые переменные одинаковы. Например, пример CMAKE_SOURCE_DIR и PROJECT_SOURCE_DIR. Они одинаковы, ссылаясь на папку, где определен CMakeLists.txt верхнего уровня. Поэтому мой вопрос: есть ли между ними тонкая разница? Благодарю.

4b9b3361

Ответ 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>.