1

我正在编写一个libdog-dev用于 D 语言编程的实用程序库,这里是Makefile.am

sited2dir = /usr/include/d2/site
lib32dir = ${libdir}/i386-linux-gnu
# lib64dir = ${libdir}/x86_64-linux-gnu

lib32_LIBRARIES = \
    i386/libdog.a

# lib64_LIBRARIES = \
#     x86_64/libdog.a

i386/libdog.a:
    mkdir -p i386
    dmd -lib -m32 -of$@ -op -Hdi386/include/ `find src/ -name '*.d'`

x86_64/libdog.a:
    mkdir -p x86_64
    dmd -lib -m64 -of$@ -op -Hdx86_64/include/ `find src/ -name '*.d'`

# Since the header files for i386/x86_64 are the same, let's just pick the i386 one.
install-data-hook: 
    mkdir -p $(DESTDIR)$(sited2dir)
    rsync -av i386-linux-gnu/include/ $(DESTDIR)$(sited2dir)

它正在工作,但是,我仍然不清楚:

  • 我需要包含AC_PROG_CCand AC_PROG_RANLIBin configure.ac,这应该是不必要的,因为这个项目中没有 c/c++ 源代码。缺少这两个语句将导致错误。

  • 我只能libdog.aMakefile.am. 我在上面的代码中注释掉了 x86-64 之一,如果我包含它,automake 将显示错误:

    cd . && /bin/bash /home/lenik/tasks/1-uni/devel/libdog-dev/missing --run automake-1.11 --gnu Makefile
    Makefile.am: object `libdog.$(OBJEXT)' created by `x86_64/libdog.c' and `i386/libdog.c'
    make: *** [Makefile.in] Error 1
    

    我想在一个包中包含 i386 和 x86-64 的两个版本,就像dmdDebian 的官方包一样:

    ...                              (install tree of the dmd-2.059-0 package)
    |-- lib/
    |   |-- i386-linux-gnu/
    |   |   `-- libphobos2.a
    |   `-- x86_64-linux-gnu/
    |       `-- libphobos2.a
    
  • 我已经硬编码了拱名i386-linux-gnux86_64-linux-gnu在 Makefile 源代码中,但是,它应该以某种方式生成..?

4

1 回答 1

1
  1. Automake 将尝试为_LIBRARIES目标中列出的文件查找 C/C++ 源。因此,只需将它们更改为_DATA目标:

    lib32_DATA = \
        i386/libdog.a
    
    lib64_DATA = \
        x86_64/libdog.a
    
  2. 您可以通过运行以下命令生成主机系统的名称i386-linux-gnu或名称:x86_64-linux-gnu

    dpkg-architecture -qDEB_HOST_GNU_TYPE
    

    您还可以从/etc/ld.so.conf和获取库路径/etc/ld.so.conf.d/*

于 2012-10-17T11:36:00.037 回答