project
Установите имя проекта.
Краткое описание
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])
Устанавливает имя проекта и сохраняет его в переменной PROJECT_NAME. При вызове из верхнего уровня CMakeLists.txt также сохраняет имя проекта в переменной CMAKE_PROJECT_NAME.
Также устанавливаются переменные:
-
PROJECT_SOURCE_DIR,<PROJECT-NAME>_SOURCE_DIR -
Абсолютный путь к каталогу исходных файлов проекта.
-
PROJECT_BINARY_DIR,<PROJECT-NAME>_BINARY_DIR -
Абсолютный путь к каталогу библиотек проекта.
-
PROJECT_IS_TOP_LEVEL,<PROJECT-NAME>_IS_TOP_LEVEL -
Введено в версии 3.21.
Булево значение, указывающее, является ли проект верхним уровнем.
Дополнительные переменные устанавливаются с помощью необязательных аргументов, описанных в разделе Параметры ниже. Если параметр не задан, соответствующая переменная устанавливается в пустую строку.
Обратите внимание, что переменные вида <name>_SOURCE_DIR и <name>_BINARY_DIR могут быть установлены другими командами до вызова project() (см. команду FetchContent_MakeAvailable() для примера). Проекты не должны полагаться на то, что <PROJECT-NAME>_SOURCE_DIR или <PROJECT-NAME>_BINARY_DIR сохраняют определенное значение за пределами области вызова project() или одной из его дочерних областей.
Изменено в версии 3.30.3: <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, и <PROJECT-NAME>_IS_TOP_LEVEL всегда устанавливаются как переменные без кэширования командой project(<PROJECT-NAME> ...).
Изменено в версии 3.30.4: Переменные <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, и <PROJECT-NAME>_IS_TOP_LEVEL устанавливаются как переменные без кэширования только в том случае, если они уже установлены как переменные с кэшированием или без кэширования при вызове project(<PROJECT-NAME> ...). Обратите внимание, что эта логика некорректна, так как может привести к разному поведению при первом и последующих запусках, потому что переменные кэширования не будут существовать при первом запуске, но будут при последующих.
Изменено в версии 3.30.5: Переменные <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, и <PROJECT-NAME>_IS_TOP_LEVEL устанавливаются как переменные без кэширования только в том случае, если они уже установлены как переменные без кэширования при вызове project(<PROJECT-NAME> ...). В отличие от некорректного поведения версии 3.30.4, переменные без кэширования не будут установлены, если установлены только переменные с кэшированием с тем же именем.
Параметры
Параметры:
-
VERSION <version> -
Необязательный; может быть использован только если политика
CMP0048установлена в значениеNEW.Принимает
<version>аргумент, состоящий из компонентов неотрицательных целых чисел, т.е.<major>[.<minor>[.<patch>[.<tweak>]]], и устанавливает переменные-
PROJECT_VERSION,<PROJECT-NAME>_VERSION -
PROJECT_VERSION_MAJOR,<PROJECT-NAME>_VERSION_MAJOR -
PROJECT_VERSION_MINOR,<PROJECT-NAME>_VERSION_MINOR -
PROJECT_VERSION_PATCH,<PROJECT-NAME>_VERSION_PATCH -
PROJECT_VERSION_TWEAK,<PROJECT-NAME>_VERSION_TWEAK.
Введено в версии 3.12: Когда команда
project()вызывается из верхнего уровняCMakeLists.txt, версия также сохраняется в переменнойCMAKE_PROJECT_VERSION. -
-
DESCRIPTION <project-description-string> -
Введено в версии 3.9.
Необязательный. Устанавливает переменные
в значение
<project-description-string>. Рекомендуется, чтобы это описание было относительно коротким, обычно не более нескольких слов.Когда команда
project()вызывается из верхнего уровняCMakeLists.txt, описание также сохраняется в переменнойCMAKE_PROJECT_DESCRIPTION.Введено в версии 3.12: Добавлена переменная
<PROJECT-NAME>_DESCRIPTION. -
HOMEPAGE_URL <url-string> -
Введено в версии 3.12.
Необязательный. Устанавливает переменные
в значение
<url-string>, которое должно быть каноническим URL-адресом домашней страницы проекта.Когда команда
project()вызывается из верхнего уровняCMakeLists.txt, URL также сохраняется в переменнойCMAKE_PROJECT_HOMEPAGE_URL. -
LANGUAGES <language-name>... -
Необязательный. Также может быть указан без ключевого слова
LANGUAGESпо первой, короткой сигнатуре.Выбирает языки программирования, необходимые для построения проекта.
Поддерживаемые языки: C, CXX (т.е. C++), CSharp (т.е. C#), CUDA, OBJC (т.е. Objective-C), OBJCXX (т.е. Objective-C++), Fortran, HIP, ISPC, Swift, ASM, ASM_NASM, ASM_MARMASM, ASM_MASM, и ASM-ATT.
Введено в версии 3.8: Добавлена поддержка CSharp и CUDA.
Введено в версии 3.15: Добавлена поддержка Swift.
Введено в версии 3.16: Добавлена поддержка OBJC и OBJCXX.
Введено в версии 3.18: Добавлена поддержка ISPC.
Введено в версии 3.21: Добавлена поддержка HIP.
Введено в версии 3.26: Добавлена поддержка ASM_MARMASM.
Если включено ASM, укажите его в конце, чтобы CMake мог проверить, работают ли компиляторы для других языков, таких как C, и для ассемблера.
По умолчанию C и CXX включены, если не указаны параметры языка. Укажите язык NONE, или используйте ключевое слово LANGUAGES и не указывайте языки, чтобы пропустить включение каких-либо языков.
Переменные, заданные через параметры VERSION, DESCRIPTION и HOMEPAGE_URL предназначены для использования в качестве значений по умолчанию в метаданных и документации пакетов.
Вставка кода
Пользователь может определить ряд переменных, чтобы указать файлы для включения в различные моменты выполнения команды project(). Следующее описывает шаги, выполняемые при вызове команды project():
-
Новое в версии 3.15: Для каждого вызова
project()независимо от имени проекта, включайте файлы и модули, указанные вCMAKE_PROJECT_INCLUDE_BEFORE, если они заданы. -
Новое в версии 3.17: Если команда
project()указывает<PROJECT-NAME>в качестве имени проекта, включайте файлы и модули, указанные вCMAKE_PROJECT_<PROJECT-NAME>_INCLUDE_BEFORE, если они заданы. - Установите различные переменные, специфичные для проекта, подробное описание которых представлено в разделах «Synopsis» и «Options» выше.
-
Только для первого вызова
project():- Если
CMAKE_TOOLCHAIN_FILEзадано, прочтите его хотя бы один раз. Он может быть прочитан несколько раз и снова при включении языков (см. ниже). - Установите переменные, описывающие целевые и хост-платформы. Возможно, переменные, специфичные для языка, будут установлены на этом этапе. При первом запуске будут определены только переменные, специфичные для языка, которые могут быть установлены файлом toolchain. При последующих запусках могут быть установлены переменные, специфичные для языка, кэшированные с предыдущего запуска.
-
Новое в версии 3.24: Включите каждый файл, перечисленный в
CMAKE_PROJECT_TOP_LEVEL_INCLUDES, если он задан. После этого CMake проигнорирует переменную.
- Если
- Включите языки, указанные в вызове, или по умолчанию, если они не были предоставлены. Файл toolchain может быть повторно прочитан при первом включении языка.
-
Новое в версии 3.15: Для каждого вызова
project()независимо от имени проекта, включайте файлы и модули, указанные вCMAKE_PROJECT_INCLUDE, если они заданы. - Если команда
project()указывает<PROJECT-NAME>в качестве имени проекта, включайте файлы и модули, указанные вCMAKE_PROJECT_<PROJECT-NAME>_INCLUDE, если они заданы.
Использование
Файл верхнего уровня CMakeLists.txt для проекта должен содержать прямой вызов команды project(); загрузка через команду include() недостаточно. Если такого вызова нет, CMake выведет предупреждение и предположит наличие project(Project) вверху для включения языков по умолчанию (C и CXX).
Примечание
Вызовите команду project() в начале файла верхнего уровня CMakeLists.txt, но после вызова cmake_minimum_required(). Важно установить настройки версии и политики перед вызовом других команд, поведение которых они могут повлиять, и по этой причине команда project() выведет предупреждение, если порядок не соблюден. См. также политику CMP0000.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.30/command/project.html