Как установить cmake на mac os

Обновлено: 04.07.2024

На первом шаге проект нужно сконфигурировать, то есть создать финальный скрипт сборки, запустив cmake <параметры> <путь-к-каталогу> в будущем каталоге сборки.

На втором шаге нужно запустить финальный скрипт. Не вызывайте make ! Утилита cmake сделает это сама:

Структура CMakeLists.txt

В начале главного файла CMakeLists.txt ставят метаинформацию о минимальной версии CMake и названии проекта:

Затем следует список инструкций, служащих для вычисления различных переменных, создания целей сборки, подключения проектов из подкаталогов и так далее. Например, подключить дополнительный CMakeLists.txt из подкаталога можно так:

Целью может стать исполняемый файл, собираемый из исходного кода

Целью также может быть библиотека, статическая или динамическая.

Автогенерация проекта для Visual Studio (Windows)

Если используется Visual C++, то путь немного другой: на шаге конфигурирования создаётся проект для Visual Studio, который затем можно собрать из IDE либо так же из командной строки.

Созданный проект Visual Studio нельзя изменять и использовать постоянно, потому что при генерации проекта используются абсолютные пути и другие неприемлемые для постоянной работы вещи.

Если проект был сконфигурирован успешно, то в каталоге ../myapp-build появятся автоматически сгенерированный BUILD_ALL.sln и проекты для Visual Studio. Их можно открыть к IDE, либо собрать из командной строки с помощью cmake. Названия опций говорят сами за себя:

Зависимости между библиотеками и приложениями

Не используйте директивы include_directories , add_definitions , add_compile_options ! Они меняют глобальные настройки для всех целей, это создаёт проблемы при масштабировании.

  • Используйте target_link_libraries для добавления статических и динамических библиотек, от которых зависит цель
  • Используйте target_include_directories вместо include_directories для добавления путей поиска заголовков, от которых зависит цель
  • Используйте target_compile_definitions вместо add_definitions для добавления макросов, с которыми собирается цель
  • Используйте target_compile_options для добавления специфичных флагов компилятора, с которыми собирается цель

Вы можете выбирать область видимости настройки:

  • PUBLIC делает настройку видимой для текущей цели и для всех зависящих от неё целей
  • PRIVATE делает настройку видимой только для текущей цели
  • INTERFACE делает настройку видимой только для всех зависящих от неё целей

Пример использования областей видимости:

Схема зависимостей условного проекта:

Схема

Выбор стандарта и диалекта C++

Для настройки стандарта и флагов языка C++ не добавляйте флаги напрямую!

В CMake версии 3.8+ вы можете прямо потребовать включить нужный стандарт:

В CMake версии до 3.7 включительно можно использовать set_target_properties (если не работает, то у вас слишком старый CMake):

Для разработчиков библиотек есть более тонкий контроль над возможностями языка:

Функции в CMake

CMake позволяет объявлять функции командами function(name) / endfunction() и макросы командами macro(name) / endmacro() . Предпочитайте функции, а не макросы, т.к. у функций есть своя область видимости переменных, а у макросов - нет.

Добавление исходников к цели с target_sources

Лучше добавлять специфичные исходники с помощью target_sources, а не с помощью дополнительных переменных.

Интерфейс к утилитам командной строки

Функция find_package

Функция find_package принимает имя библиотеки как аргумент и обращается к CMake, чтобы найти скрипт для настройки переменных данной библиотеки. В итоге при сборке либо возникает ошибка из-за того что пакет не найден, либо добавляются переменные, хранящие пути поиска заголовков, имена библиотек для компоновщика и другие параметры.

Пример подключения Boost, вызывающего встроенный в CMake скрипт FindBoost:

Пример подключения библиотеки Bullet с помощью встроенного скрипта FindBullet и компоновки с приложением my_app:

CMake - это кроссплатформенная система сборки, использующая указанное имя CMakeLists.txt Файл конфигурации может управлять процессами создания, тестирования и упаковки программного обеспечения.

Основная роль CMake заключается в создании Makefile для написанного CMakeList.txt. Поскольку компиляция каждого .c перед большим проектом, написанным на языке C, является слишком повторяющейся и утомительной, появилась команда make, и команда make была скомпилирована партиями через Makefile. Но Makefile очень утомителен, если вы пишете его самостоятельно, поэтому CMakeList.txt и CMake появляются снова.

Во-первых, интерфейс GUI


Где находится исходный код, заполняемый в корневом каталоге проекта, корневой каталог содержит Конфигурационный файл CMakeLists.txt

Где сборка бинарных файлов указана в каком каталоге генерируется сборка

Например, создайте новый каталог hello, hello has main.c, CMakeLists.txt и пустой каталог сборки, затем заполните его, как показано выше

Код выглядит следующим образом:

Заполнив его, нажмите «Настроить», выберите «Unix Makefiles» и «Использовать встроенные компиляторы по умолчанию», нажмите «Готово», затем cmake автоматически поможет вам построить этот проект, сгенерированные файлы находятся в каталоге сборки и нажмите «Создать» для завершения («Настроить это»). В некоторых случаях кнопка требует еще несколько нажатий)

Использование cmake в терминале

1. Сначала введите cmake непосредственно в терминале.Если отображается команда не найдена, это означает, что вы не настроили путь.

Затем следуйте рисунку ниже, нажмите «Как установить для использования из командной строки в инструментах», справа появится всплывающее окно, затем первая строка

PATH = "/ Applications / CMake.app / Contents / bin": "$ PATH"


Введите cmake и снова нажмите Enter, вместо команды не найдена некоторая информация.

Следующим шагом является создание каталогов, таких как hello.

2. Перейдите во встроенный каталог build в терминале и выполните cmake .. (будьте осторожны, чтобы не забыть "..")

это может показаться очевидным для кого-то, но не для меня.

Как использовать cmake на Mac? Допустим, у меня есть проект в Xcode, и я хочу, чтобы этот проект был связан с библиотекой assimp.

Поэтому я загружаю источник assimp, генерирую сборку с помощью cmake, указываю Xcode на / include в загруженном источнике и что тогда? Где собраны библиотеки?
У меня есть только проект Xcode этой библиотеки. Это генерирует библиотеки?

Если я использую заваривать чтобы установить assimp, я установил это только в своем проекте Xcode:

  1. путь заголовка:
    / USR / местные / включить
  2. Путь поиска библиотеки:
    / USR / местные / Библиотека
  3. установить флаг лайнера в:
    -lassimp

Каковы преимущества cmake для построения библиотек из исходного кода, кроме того, что этот источник «свежий», и я не могу сделать это правильно?

Может ли кто-нибудь опубликовать шаг за шагом, что делать при создании вещей с помощью Cmake, с объяснением?

Самое главное, где Cmake размещает библиотеки и как с ними связываться?

Решение

CMake не собирает библиотеки, он «только» генерирует специфичные для платформы Make-файлы (или их эквиваленты).
Вам все еще нужно скомпилировать и установить скомпилированные библиотеки и заголовки.

Для библиотеки, которую вы хотите собрать, необходимы следующие шаги (я делаю их в Linux, но это должно быть применимо и к Mac OS X).

build папка теперь содержит Makefile и когда ты бежишь make библиотека будет скомпилирована.

После этого шага, недавно построенная библиотека находится в build/code/libassimp.so ,

Вы можете оставить библиотеку, а также включить туда файлы и ссылаться на них при компиляции / компоновке вашего проекта. Обычно вы хотите install их, поэтому они доступны для всей системы и могут быть найдены автоматически.

Это сделано с помощью sudo make install ,

Библиотека должна быть в /usr/local/lib включаемые файлы в /usr/local/include , Вы можете изменить эти места используя CMake .

Сборка должна запускаться с x86_64 (Intel) на macOS версии 10.15 (Catalina) и выше в последней версии компилятора Xcode's native AppleClang, Homebrew's vanilla Clang или в GCC-компиляторах.

Установка Homebrew

Установка Xcode и инструментов командной строки

Установите из App Store последнюю версию Xcode.

Запустите ее, чтобы принять лицензионное соглашение. Необходимые компоненты установятся автоматически.

Затем убедитесь, что в системе выбрана последняя версия инструментов командной строки:

bash $ sudo rm -rf /Library/Developer/CommandLineTools $ sudo xcode-select --install

Установка компиляторов, инструментов и библиотек

bash $ brew update $ brew install cmake ninja libtool gettext llvm gcc

Просмотр исходников ClickHouse

Сборка ClickHouse

Чтобы запустить сборку в компиляторе Xcode's native AppleClang:

bash $ cd ClickHouse $ rm -rf build $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_JEMALLOC=OFF .. $ cmake --build . --config RelWithDebInfo $ cd ..

Чтобы запустить сборку в компиляторе Homebrew's vanilla Clang:

bash $ cd ClickHouse $ rm -rf build $ mkdir build $ cd build $ cmake -DCMAKE_C_COMPILER=$(brew --prefix llvm)/bin/clang -DCMAKE_CXX_COMPILER==$(brew --prefix llvm)/bin/clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_JEMALLOC=OFF .. $ cmake -DCMAKE_C_COMPILER=$(brew --prefix llvm)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm)/bin/clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_JEMALLOC=OFF .. $ cmake --build . --config RelWithDebInfo $ cd ..

Чтобы собрать с помощью компилятора Homebrew's vanilla GCC:

bash $ cd ClickHouse $ rm -rf build $ mkdir build $ cd build $ cmake -DCMAKE_C_COMPILER=$(brew --prefix gcc)/bin/gcc-11 -DCMAKE_CXX_COMPILER=$(brew --prefix gcc)/bin/g++-11 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_JEMALLOC=OFF .. $ cmake --build . --config RelWithDebInfo $ cd ..

Предупреждения

Если будете запускать clickhouse-server , убедитесь, что увеличили системную переменную maxfiles .

Читайте также: