Эта страница содержит хорошее резюме переменных, которые 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>.