2012-12-25 32 views
3

这是编译和链接一个静态库(所以只有一个构建时间依赖),源是从一个存储库中提取(就像主程序的源代码)在Ubuntu的启动板构建机器人。如何从pbuilder env debian/rules脚本中使用cmake的'make install'?

目前我在做什么:

#!/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 [email protected] 
    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软件库在Launchpad中pbuilder静态库的依赖env,因此可以像使用系统依赖一样使用它。

如果我尝试做'sudo make install'(并且在debian/control中为build-deps添加sudo),它会在本地测试时询问'pbuilder'的密码,机器上的Ubuntu的buildbots。

编辑:它实际上在buildbots上失败,因为'没有指定tty present和没有askpass程序'。

回答

0

这只是一个权限问题? (即 - 必须使用'sudo'安装到'/ usr/local'?)

你必须将它安装到'/ usr/local'吗?

如果它只是一个静态库,纯粹需要“依赖mt32emu的程序”的构建,那么你可以把它放在任何地方,只要告诉依赖程序它在哪里。

要安装到其他地方,请使用-DCMAKE_INSTALL_PREFIX =/directory/where/you/have/write/privileges。或者在make install中使用DESTDIR =。

0

有几件事你可以做,以清理你的rules文件,特别是当你使用dh

%目标,所有的dh命令带一个参数builddirectory,指定要构建在什么目录中。这将告诉生成器来cd到该目录,然后电话命令(makecmake等。 )。

此外,您应该让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 [email protected] --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... 
0

我这最终通过取决于启动板库的依赖关系“解决”,即建设一个全包磁带库和建筑,在启动板然后将放置的档案导入到其他版本。我猜是明确的。