2012-10-16 53 views
1

我正在写一个实用程序库libdog-dev与d语言编程,这里是Makefile.am如何在Makefile.am中包含从D源生成的静态库?

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 [email protected] -op -Hdi386/include/ `find src/ -name '*.d'` 

x86_64/libdog.a: 
    mkdir -p x86_64 
    dmd -lib -m64 [email protected] -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_CCAC_PROG_RANLIB,configure.ac,这应该是不必要的,因为这个项目中没有c/C++源代码。缺少这两条语句将导致错误。

  • 我只能在Makefile.am中包含单个libdog.a。我有注释掉的代码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的,就像官方dmd包Debian的:

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

回答

1
  1. Automake会尝试找到C/C++源代码中_LIBRARIES目标列出的文件。所以,只要他们改变_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/*获得库路径。