Skip to content
Vladislav edited this page Jan 19, 2015 · 5 revisions

Сборка на 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 .

Clone this wiki locally