-
Notifications
You must be signed in to change notification settings - Fork 3
BuildOnMac
Процесс сборки на маке достаточно прост, но имеет несколько нюансов.
CMake можно установить скачав .pkg с http://www.cmake.org, а можно воспользоваться mac ports или homebrew. Конкретный способ установки не важен, главное, чтобы в результате версия cmake была не ниже 2.8.12 (к слову, мы не используем ничего специфичного для этой версии и если очень влом качать новую, можно пройтись по всем cmake файлам и поменять версию в строке cmake_minimum_required(VERSION 2.8.12), но ниже 2.8.9 ставить не рекомендую).
Python и Git есть в системе по умолчанию, поэтому проблем с ними быть не должно.
Необходимо установить XCode из AppStore, чтобы в системе появился clang. Нужно запустить его хотя бы один раз, чтобы принять лицензионное соглашение (потребуется ввести пароль).
OpenCV не существует в собранном виде под мак, кажется он есть в MacPorts, но в HomeBrew его нет. Сборка достаточно проста. ${OPENCV_INSTALL_PREFIX} может быть практически любым, к примеру у меня это /usr/local/Celluar/opencv.
git clone git://github.com/Itseez/opencv.git && cd opencv
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
make && make install
Можно установить ninja, это аналог make, который имеет чуть меньше функций, но зато значительно быстрее работает. Но тут уж на вкус и цвет. ninja есть в MacPorts и HomeBrew. Если есть большое желание, можно и самостоятельно собрать, описывать процесс не буду.
Здесь все почти просто. Нужно склонировать репозиторий, подтянуть субмодули и установить хук линтера.
git clone [email protected]:it-workshop/caroline.git && cd caroline
git submodule update --init
./build/install_hooks.sh
Кстати, о субмодулях. Если вдруг что-то перестало собираться из-за каких-то зависимостей, скорее всего необходимо обновить субмодули (ну или просто кто-то говорит, что после конкретного пулл-реквеста нужно это сделать).
git submodule update
С CMake конфигурация сборки не является чем-то невероятно сложным. Я рекомендую создать отдельную директорию, например out, чтобы отделить генерируемые файлы от всего остального и держать репозиторий в чистоте. Конечно же, мы уже добавили в .gitignore довольно много файлов, но это не значит, что при сборке не сгенерируется ничего такого, что там не перечислено.
mkdir out && cd out
cmake -DOpenCV_DIR=${OPENCV_INSTALL_PREFIX}/share/OpenCV/ -G Ninja ..
Возможно не придется указывать путь к файлам OpenCV, если устанавливать его в другое место. -G Ninja Заставит сгенерировать сборочные файлы для Ninja, а не для Make, опять же, как будет удобнее.
Теперь можно собственно собрать проект.
make
или
ninja
В любом случае можно передать флаг -jN, чтобы установить количество процессов сборки, ninja по умолчанию использует 2N+1, где N равно количество ядер, а make по умолчанию собирает в один поток.
Юнит тесты можно запустить двумя способами. Через цель сборки test или запустив исполняемый файл unit_tests (в этом случае можно запустить только конкретно выбранные тесты и увидеть их результаты).
make test ninja test ./unit_tests
На этапе конфигурации репозитория скрипт build/install_hooks.sh прописывает в git pre-commit hook вызов скрипта build/lint_all.sh. Благодаря этому при попытке что-нибудь закоммитить запускается cpplint и проверяет стиль во всех файлах. При нарушении стиля будут выведены сообщения и процесс коммита будет прерван.
Также можно запустить линтер самостоятельно, для этого нужно запустить в директории проекта:
./build/lint_all.sh .