Как использовать 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.

Другие вопросы по тегам