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: <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, и <PROJECT-NAME>_IS_TOP_LEVEL, если они уже были установлены как обычные переменные при вызове project(<PROJECT-NAME> ...), обновляются при вызове. Элементы кэша с такими же именами всегда устанавливаются, как и раньше. Подробности см. в примечаниях к выпуску 3.30.3, 3.30.4 и 3.30.5.
Изменено в версии 3.31: <PROJECT-NAME>_SOURCE_DIR, <PROJECT-NAME>_BINARY_DIR, и <PROJECT-NAME>_IS_TOP_LEVEL всегда устанавливаются как обычные переменные при вызове project(<PROJECT-NAME> ...). См. политику CMP0180. Элементы кэша с такими же именами всегда устанавливаются, как и раньше.
Параметры
Параметры:
-
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, если они заданы. - Установите различные переменные, специфичные для проекта, описанные в разделах «Краткое описание» и «Параметры» выше.
-
Только для первого вызова
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.31/command/project.html