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



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

800   1  

1 ответ:

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

Comments

    Ничего не найдено.