Как использовать cmake 'make install' из сценария debian/rules pvilder env?
Это предназначено для компиляции и компоновки статической библиотеки (то есть только зависимости времени сборки), которую источник выбирает из репозитория (так же, как исходный код основной программы) на сборочном боте панели запуска Ubuntu.
В настоящее время я делаю:
#!/usr/bin/make -f
export PREFIX=/usr
export CFLAGS= -O3 -fomit-frame-pointer -flto -fwhole-program
export CXXFLAGS= -O3 -fomit-frame-pointer -flto -fwhole-program
%:
dh $@
override_dh_auto_configure:
cd src/munt;cmake -DCMAKE_CXX_FLAGS="-O3 -fomit-frame-pointer -flto" mt32emu;make;make install
#...compile of the program that depends on mt32emu...
Но это не так с:
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/libmt32emu.a
CMake Error at cmake_install.cmake:36 (FILE):
file INSTALL cannot copy file
"/tmp/buildd/dosbox-0.74+20121225/src/munt/libmt32emu.a" to
"/usr/local/lib/libmt32emu.a".
make[2]: *** [install] Error 1
make[2]: Leaving directory `/tmp/buildd/dosbox-0.74+20121225/src/munt'
make[1]: *** [override_dh_auto_configure] Error 2
make[1]: Leaving directory `/tmp/buildd/dosbox-0.74+20121225'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
E: Failed autobuilding of package
I: unmounting /var/cache/pbuilder/ccache filesystem
I: unmounting dev/pts filesystem
I: unmounting proc filesystem
I: cleaning the build env
I: removing directory /var/cache/pbuilder/build//2751 and its subdirectories
Идея состоит в том, чтобы установить статическую библиотечную зависимость, которая не упакована в репозитории ubuntu в env launchpad pbuilder, поэтому ее можно использовать так, как если бы она уже была системной зависимостью.
Если я пытаюсь выполнить 'sudo make install' (и добавить sudo к build-deps в debian / control), он запрашивает у меня пароль 'pbuilder' при локальном тестировании, который, как я предполагаю, повесит машину на Ubuntu. buildbots.
edit: на самом деле происходит сбой на сборочных ботах, потому что "нет tty присутствует и не задана программа askpass"
3 ответа
Есть несколько вещей, которые вы можете сделать, чтобы очистить свой rules
файл, особенно когда вы используете dh
,
в %
цель, все dh
команда принять параметр builddirectory
, который указывает, в каком каталоге вы строите. Это говорит сборщику cd
в этот каталог, а затем вызвать команды (make
, cmake
, так далее.).
Кроме того, вы должны просто позволить dh
установить файлы для вас. Это делается автоматически. Вам не нужно звонить make install
вручную.
Вот немного легче для чтения rules
файл:
#!/usr/bin/make -f
export PREFIX=/usr
export CFLAGS= -O3 -fomit-frame-pointer -flto -fwhole-program
export CXXFLAGS= -O3 -fomit-frame-pointer -flto -fwhole-program
%:
dh $@ --builddirectory=src/munt
override_dh_auto_configure:
cd src/munt && cmake -DCMAKE_CXX_FLAGS="-O3 -fomit-frame-pointer -flto" mt32emu
#...compile of the program that depends on mt32emu...
В конце концов я "решил" это, полагаясь на зависимости репозитория на панели запуска, то есть построив целый пакет для библиотеки и собрав его на панели запуска, а затем импортировав архив, в который он был помещен, в другие мои сборки. Я сделал это явно.
Это просто проблема с разрешениями? (то есть - для установки в / usr / local необходимо использовать 'sudo'?)
Должны ли вы установить его в / usr / local?
Если это просто статическая библиотека, просто необходимая для сборки "программы, зависящей от mt32emu", то вы можете поместить ее куда угодно и просто указать зависимой программе, где она находится.
Чтобы установить в другом месте, используйте -DCMAKE_INSTALL_PREFIX=/ каталог / где / вы / есть / записи / привилегии. Или используйте DESTDIR= с make install.