-
Notifications
You must be signed in to change notification settings - Fork 3
BuildOnLinux
Сборка на Linux будет по-проще, чем на остальных платформах, во многом благодаря тому, что все зависимости можно спокойно взять из репозиториев и не мучаться с их конфигурацией.
В простейшем случае предварительно установить нужно только git и opencv. У проекта есть репозиторий depot_tools где собраны все инструменты, необходимые для работы с проектом. А именно: clang, llvm, cmake, ninja, protoc, python. Все что нужно: загрузить репозиторий и указать системе путь до бинарников в нем.
git clone http://stash.technoworks.ru/scm/caroline/depot_tools_linux.git
PATH=$PATH:/path/to/depot_tools/bin; export PATH
Или же, устанавливаем все из репозиториев:
gcc или clang,
protoc (пакет protobuf-compiler на Debian Wheezy),
cmake,
make или ninja (имя пакета ninja-build на Debian Jessie),
python, git, opencv.
Половина из этого списка скорее всего уже есть в системе.
Клонируем репозиторий, подтягиваем субмодули, устанавливаем хуки.
git clone [email protected]:it-workshop/caroline.git && cd caroline
git submodule update --init
./build/install_hooks.sh
К слову, если возникает необходимость обновить субмодули, нужно выполнить следующую команду:
git submodule update
Настоятельно рекомендую собирать проект в отдельной директории, например out. Это позволит отделить все генерируемые файлы от исходных. Конечно же, хозяин-барин и можно собирать прямо на месте, тем-более, что многое прописано в .gitignore, но кажется, не все, да и мусор в репозитории никто не любит.
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
Стоит заметить, что -G Ninja нужно только для сборки с помощью ninja, а -DCMAKE_BUILD_TYPE=Debug, только при желании получить дебажную сборку.
По-умолчанию на Linux используется системный OpenCV (смотри CMakeLists.txt). На Debian Wheezy/Jessie это приводит к ошибкам сборки. Может помочь опция, которая принуждает использовать OpenCV из third_party:
cmake -Duse_own_opencv=YES ..
Внимание! Собранный таким образом OpenCV занимает около 4ГБ.
Все просто, в зависимости от того, какую систему сборки выбрали, вызываем:
make
или
ninja
Обе команды поддерживают флаг -jN, для задания числа процессов сборки. При этом ninja по умолчанию использует 2N+1 процесс для N-ядерной системы, а make по умолчанию работает в однопоточном режиме.
На Debian Jessie возникает ошибка
undefined reference to symbol 'v4l2_munmap'
Для устранения нужно передать линковщику ld флаг -lv4l2 через cmake (файлы CMakeLists проекта и OpenCV)
Для запуска юнит-тестов можно использовать отдельную цель сборки 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 .