2012-10-16 3 views
1

나는 D 언어와 프로그래밍을위한 유틸리티 라이브러리 libdog-dev을 쓰고, 여기에 Makefile.am입니다 : 제대로 작동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 [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) 

그러나, 뭔가 난 아직 불분명 해요 :

  • 내가 필요 이 프로젝트에 c/C++ 소스가 없으므로 AC_PROG_CCAC_PROG_RANLIBconfigure.ac에 포함해야합니다.이 값은 불필요합니다. 두 명령.이 누락되면 오류가 발생합니다.

  • 에는 단 하나의 libdog.a 만 포함 할 수 있습니다. 나는 그것을 포함하는 경우, automake에 오류가 표시됩니다 위의 코드에서 - 64 일을 주석했다 :

    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 패키지 : 열심히 메이크 소스에 아치 이름 i386-linux-gnux86_64-linux-gnu 코딩했다

    ...        (install tree of the dmd-2.059-0 package) 
    |-- lib/ 
    | |-- i386-linux-gnu/ 
    | | `-- libphobos2.a 
    | `-- x86_64-linux-gnu/ 
    |  `-- libphobos2.a 
    
  • 하지만, 어떻게 든 생성해야 ..?

답변

1
  1. Automake는 _LIBRARIES 목표에 나열된 파일을 C/C++ 소스를 찾기 위해 노력할 것입니다. 실행하여

    lib32_DATA = \ 
        i386/libdog.a 
    
    lib64_DATA = \ 
        x86_64/libdog.a 
    
  2. 당신은 이름 i386-linux-gnu 또는 호스트 시스템의 x86_64-linux-gnu을 생성 할 수 있습니다 : 그래서, 단지 _DATA 대상으로 변경

    dpkg-architecture -qDEB_HOST_GNU_TYPE 
    

    또한 /etc/ld.so.conf/etc/ld.so.conf.d/*에서 라이브러리 경로를 얻을 수 있습니다 .

관련 문제