3

这是为了编译和链接一个静态库(因此只有构建时间依赖项),该库的源代码是从 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

这个想法是安装一个未打包在启动板 pbuilder env 中的 ubuntu 存储库中的静态库依赖项,因此它可以像已经是系统依赖项一样使用。

如果我尝试执行“sudo make install”(并将 sudo 添加到 debian/control 中的 build-deps),它会在本地测试时询问我“pbuilder”密码,我假设这会将机器挂在 ubuntu 上构建机器人。

编辑:它实际上在 buildbots 上失败了,因为“没有 tty 存在并且没有指定 askpass 程序”。

4

3 回答 3

1

你可以做几件事来清理你的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 $@ --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...
于 2014-02-08T14:19:11.010 回答
0

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

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

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

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

于 2013-09-20T11:28:41.597 回答
0

我最终通过依赖启动板存储库依赖关系“解决”了这个问题,也就是说,为库构建一个完整的包并在启动板上构建它,然后将放置在我的其他构建中的存档导入。我猜是明确的。

于 2014-02-11T22:03:39.350 回答