Как установить cmake на mac os
На первом шаге проект нужно сконфигурировать, то есть создать финальный скрипт сборки, запустив 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:
- путь заголовка:
/ USR / местные / включить - Путь поиска библиотеки:
/ USR / местные / Библиотека - установить флаг лайнера в:
-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 .
Читайте также: