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

Разница между CMAKE_CURRENT_SOURCE_DIR и CMAKE_CURRENT_LIST_DIR

Из Wiki:

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 завершает обработку команд из файла, он восстанавливает предыдущее значение. Поэтому значение переменной внутри макроса или функции является каталогом файла, вызывающего самую нижнюю запись в стеке вызовов, а не в каталоге файла, содержащего определение макроса или функции.

При каких обстоятельствах эти переменные будут иметь разные значения?

4b9b3361

Ответ 1

Переменные CMAKE_CURRENT_SOURCE_DIR и CMAKE_CURRENT_LIST_DIR может ссылаться на разные каталоги для файла списка CMake, который содержится в другом файле с помощью команды include. Например, если a CMakeLists.txt присутствует в каталоге project и содержит следующую директиву

include(src/CMakeLists.txt)

тогда при обработке src/CMakeLists.txt CMAKE_CURRENT_LIST_DIR будет ссылаться на project/src, тогда как CMAKE_CURRENT_SOURCE_DIR все еще указывает на внешний каталог project.

CMAKE_CURRENT_LIST_DIR пригодится, когда вам нужно найти файлы ресурсов, такие как файлы шаблонов или пакетные скрипты, которые находятся рядом с файлом CMakeLists.txt, который в настоящее время обрабатывается.