CMAKE_SOURCE_DIR
- это то место, где изначально был вызван cmake, а CMAKE_CURRENT_SOURCE_DIR
- то, где в данный момент работает cmake. Например, если вы используете команду add_subdirectory
для включения зависимости в ваш проект, зависимость будет иметь свою собственную CMAKE_CURRENT_SOURCE_DIR
, но CMAKE_SOURCE_DIR
останется прежней.
Расширяя комментарии некоторых программистов, представьте, что у вас есть три следующих файла CMakeFiles в разных каталогах вашего проекта
CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
message("root dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("root dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
add_subdirectory(sub1)
add_subdirectory(sub2)
sub1 / CMakeLists.txt
message("sub1 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub1 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
sub2 / CMakeLists.txt
message("sub2 dir CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")
message("sub2 dir CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
Запуск cmake .
в каталоге root дает мне этот вывод
root dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
root dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub2 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests
sub2 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub2
Теперь, если я запускаю cmake .
в каталоге sub1 , я получаю одинаковое значение для обеих переменных:
sub1 dir CMAKE_SOURCE_DIR = /Users/henrique/cmake_tests/sub1
sub1 dir CMAKE_CURRENT_SOURCE_DIR = /Users/henrique/cmake_tests/sub1