我正在编写一个实用程序库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_CC
中包含AC_PROG_RANLIB
和configure.ac
,这应该是不必要的,因为此项目中没有c / c ++源代码。缺少这两个陈述将导致错误。
我只能在libdog.a
中包含单个Makefile.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的两个版本,就像Debian的官方dmd
软件包一样:
... (install tree of the dmd-2.059-0 package)
|-- lib/
| |-- i386-linux-gnu/
| | `-- libphobos2.a
| `-- x86_64-linux-gnu/
| `-- libphobos2.a
我在Makefile源代码中对主要名称i386-linux-gnu
和x86_64-linux-gnu
进行了硬编码,但是,它应该以某种方式生成..?
答案 0 :(得分:1)
Automake将尝试查找_LIBRARIES
目标中列出的文件的C / C ++源代码。因此,只需将它们更改为_DATA
目标:
lib32_DATA = \
i386/libdog.a
lib64_DATA = \
x86_64/libdog.a
您可以通过运行以下命令生成主机系统的名称i386-linux-gnu
或x86_64-linux-gnu
:
dpkg-architecture -qDEB_HOST_GNU_TYPE
您还可以从/etc/ld.so.conf
和/etc/ld.so.conf.d/*
获取图书馆路径。