将基于 gnulib 的项目交叉编译到 MinGW
Cross-compile a gnulib based project to MinGW
我正在尝试将此 project 交叉编译为 MinGW。
该项目使用 autotools 作为构建系统,并依赖于 libcurl, CUnit, Jansson 和一些 gnulib 模块。
我已经为 x86_64-w64-mingw32
编译了所有依赖项并安装在 /home/user/mingw64
下
我运行:
$ gnulib-tool --update
$ autoreconf -fi
$ CURL_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CURL_LIBS="-L/home/user/mingw64/usr/local/lib -lcurl" \
JANSSON_CFLAGS="-I/home/user/mingw64/usr/local/include" \
JANSSON_LIBS="-L/home/user/mingw64/usr/local/lib -ljansson" \
CUNIT_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CUNIT_LIBS="-L/home/user/mingw64/usr/local/lib -lcunit" \
./configure --host=x86_64-w64-mingw32
$ make
我得到这个错误:
make all-recursive
make[1]: Entering directory '/home/user/projects/shill'
Making all in po
make[2]: Entering directory '/home/user/projects/shill/po'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/user/projects/shill/po'
Making all in lib
make[2]: Entering directory '/home/user/projects/shill/lib'
make[2]: *** No rule to make target 'lib/errno.h', needed by 'all'. Stop.
make[2]: Leaving directory '/home/user/projects/shill/lib'
Makefile:1897: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/user/projects/shill'
Makefile:1429: recipe for target 'all' failed
make: *** [all] Error 2
errno.h
是 gnulib 模块的一部分。所以我认为问题来自 Makefile.am:
中的这一部分
# Find gnulib headers.
ACLOCAL_AMFLAGS = -I m4
AM_CPPFLAGS = \
-DLOCALEDIR='"$(localedir)"' \
-Ilib -I$(top_srcdir)/lib \
-Isrc -I$(top_srcdir)/src \
但我想不出解决办法。我完全按照 gnulib manual.
中描述的说明进行操作
我设法找到了解决此问题的方法。显然 autotools
并不像我想象的那么简单。
我不得不重新生成 gnulib
模块,这次指定
--makefile-name
参数。即
$ gnulib-tool ... --makefile-name=gnulib.mk ...
我从 configure.ac
中的 automake 生成的文件中删除了 lib/Makefile
。所以而不是:
dnl Put automake generated files results here
AC_CONFIG_FILES([Makefile
po/Makefile.in
lib/Makefile])
现在我有:
dnl Put automake generated files results here
AC_CONFIG_FILES([Makefile
po/Makefile.in])
我在 Makefile.am
中删除了 lib
表格 SUBDIRS
。 IE。而不是:
# Subdirectories to descend into.
SUBDIRS = po lib
我有:
# Subdirectories to descend into.
SUBDIRS = po
我在 lib
目录中创建了一个名为 local.mk
的新文件,内容如下:
include lib/gnulib.mk
# Allow "make distdir" to succeed before "make all" has run.
dist-hook: $(noinst_LIBRARIES)
.PHONY: dist-hook
并将其包含在 Makefile.am
中。
include $(top_srcdir)/lib/local.mk
最后我不得不 运行 这个命令:
$ ./build-aux/prefix-gnulib-mk --lib-name=libshill lib/gnulib.mk
就是这样。
我正在尝试将此 project 交叉编译为 MinGW。
该项目使用 autotools 作为构建系统,并依赖于 libcurl, CUnit, Jansson 和一些 gnulib 模块。
我已经为 x86_64-w64-mingw32
编译了所有依赖项并安装在 /home/user/mingw64
我运行:
$ gnulib-tool --update
$ autoreconf -fi
$ CURL_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CURL_LIBS="-L/home/user/mingw64/usr/local/lib -lcurl" \
JANSSON_CFLAGS="-I/home/user/mingw64/usr/local/include" \
JANSSON_LIBS="-L/home/user/mingw64/usr/local/lib -ljansson" \
CUNIT_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CUNIT_LIBS="-L/home/user/mingw64/usr/local/lib -lcunit" \
./configure --host=x86_64-w64-mingw32
$ make
我得到这个错误:
make all-recursive
make[1]: Entering directory '/home/user/projects/shill'
Making all in po
make[2]: Entering directory '/home/user/projects/shill/po'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/user/projects/shill/po'
Making all in lib
make[2]: Entering directory '/home/user/projects/shill/lib'
make[2]: *** No rule to make target 'lib/errno.h', needed by 'all'. Stop.
make[2]: Leaving directory '/home/user/projects/shill/lib'
Makefile:1897: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/user/projects/shill'
Makefile:1429: recipe for target 'all' failed
make: *** [all] Error 2
errno.h
是 gnulib 模块的一部分。所以我认为问题来自 Makefile.am:
# Find gnulib headers.
ACLOCAL_AMFLAGS = -I m4
AM_CPPFLAGS = \
-DLOCALEDIR='"$(localedir)"' \
-Ilib -I$(top_srcdir)/lib \
-Isrc -I$(top_srcdir)/src \
但我想不出解决办法。我完全按照 gnulib manual.
中描述的说明进行操作我设法找到了解决此问题的方法。显然 autotools
并不像我想象的那么简单。
我不得不重新生成
gnulib
模块,这次指定--makefile-name
参数。即$ gnulib-tool ... --makefile-name=gnulib.mk ...
我从
configure.ac
中的 automake 生成的文件中删除了lib/Makefile
。所以而不是:dnl Put automake generated files results here AC_CONFIG_FILES([Makefile po/Makefile.in lib/Makefile])
现在我有:
dnl Put automake generated files results here AC_CONFIG_FILES([Makefile po/Makefile.in])
我在
Makefile.am
中删除了lib
表格SUBDIRS
。 IE。而不是:# Subdirectories to descend into. SUBDIRS = po lib
我有:
# Subdirectories to descend into. SUBDIRS = po
我在
lib
目录中创建了一个名为local.mk
的新文件,内容如下:include lib/gnulib.mk # Allow "make distdir" to succeed before "make all" has run. dist-hook: $(noinst_LIBRARIES) .PHONY: dist-hook
并将其包含在
Makefile.am
中。include $(top_srcdir)/lib/local.mk
最后我不得不 运行 这个命令:
$ ./build-aux/prefix-gnulib-mk --lib-name=libshill lib/gnulib.mk
就是这样。