Разница между CMake Current SOURCE DIR и CMAKE CURRENT LIST DIR
из Вики:
CMAKE_CURRENT_SOURCE_DIR
это каталог, в котором в настоящее время обрабатываются CMakeLists.txt, который находится в
CMAKE_CURRENT_LIST_DIR
(начиная с 2.8.3) это каталог listfile в настоящее время обрабатывается.
документы:
CMAKE_CURRENT_SOURCE_DIR: путь к исходному каталогу, который в настоящее время обрабатывается.
Это полный путь к исходному каталогу это в настоящее время обрабатывается cmake.
CMAKE_CURRENT_LIST_DIR: полный каталог listfile в настоящее время обрабатывается.
Поскольку CMake обрабатывает listfiles в вашем проекте, эта переменная всегда будет установлена в каталог, где находится listfile, который в настоящее время обрабатывается (CMAKE_CURRENT_LIST_FILE). Значение имеет динамическую область видимости. Когда CMake начинает обрабатывать команды в исходном файле, он устанавливает эту переменную в каталог, где находится этот файл расположенный. Когда CMake завершает обработку команд из файла, он восстанавливает Предыдущее значение. Поэтому значение переменной внутри макроса или функции является каталогом файла, вызывающего самую нижнюю запись в стеке вызовов, а не каталогом файла, содержащего определение макроса или функции.
при каких обстоятельствах эти переменные будут иметь разные значения?
1 ответ:
переменные
CMAKE_CURRENT_SOURCE_DIRиCMAKE_CURRENT_LIST_DIRможет ссылаться на разные каталоги для файла списка CMake, который включен другим файлом с включить. Например, если aCMakeLists.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файл в настоящее время обрабатывается.
Comments