Из вики:
CMAKE_CURRENT_SOURCE_DIR - это каталог, в котором находится обрабатываемый файл CMakeLists.txt.
CMAKE_CURRENT_LIST_DIR (начиная с 2.8.3) это каталог обрабатываемого в данный момент файла списка.
Из Документов:
CMAKE_CURRENT_SOURCE_DIR: путь к исходному каталогу, который в настоящее время обрабатывается. Это полный путь к исходному каталогу, который в настоящее время обрабатывается cmake.
CMAKE_CURRENT_LIST_DIR: Полный каталог обрабатываемого в данный момент файла списка. Поскольку CMake обрабатывает файлы списка в вашем проекте, эта переменная всегда будет установлена в каталог, в котором находится файл списка, который в настоящее время обрабатывается (CMAKE_CURRENT_LIST_FILE). Значение имеет динамическую область видимости. Когда CMake начинает обработку команд в исходном файле, он устанавливает эту переменную в каталог, в котором расположен этот файл. Когда CMake завершает обработку команд из файла, он восстанавливает предыдущее значение. Следовательно, значение переменной внутри макроса или функции - это каталог файла, вызывающего самую нижнюю запись в стеке вызовов, а не каталог файла, содержащего определение макроса или функции.
При каких обстоятельствах эти переменные будут иметь разные значения?
./
?Ответы:
Переменные
CMAKE_CURRENT_SOURCE_DIR
иCMAKE_CURRENT_LIST_DIR
могут ссылаться на разные каталоги для файла списка CMake, который включается другим файлом с помощью команды include . Например, если aCMakeLists.txt
присутствует в каталогеproject
и содержит следующую директивуто пока
src/CMakeLists.txt
обрабатывается,CMAKE_CURRENT_LIST_DIR
будет ссылаться наproject/src
тогда какCMAKE_CURRENT_SOURCE_DIR
все еще указывает на внешний каталогproject
.CMAKE_CURRENT_LIST_DIR
пригодится, когда вам нужно найти файлы ресурсов, такие как файлы шаблонов или пакетные сценарии, которые расположены рядом сCMakeLists.txt
файлом, который в настоящее время обрабатывается.Примечание. При использовании
add_subdirectory()
команды вместоinclude()
поведение отличается, и приsrc/CMakeLists.txt
обработке обе переменные будут указывать наproject/src
.источник
CMAKE_CURRENT_LIST_DIR
меняется с каждым файлом, который выinclude()
; его не нужно называтьCMakeLists.txt
.CMAKE_CURRENT_LIST_DIR
иinclude(...)
в ваших проектах.CMAKE_CURRENT_SOURCE_DIR
он больше похож на,CMAKE_SOURCE_DIR
чем подразумевается в документации.add_subdirectory()
? Обе переменные будут указывать на папку?