我最终遇到与Getting started with gnulib on MinGW and not familiar (enough) with autotools相同的问题 - 也就是说,想要在MinGW Windows项目中包含netinet/in.h
这样的标题;这是我第一次听说gnulib
。
正如上面的帖子所指出的,gnulib
的主要目的是用现有的autoconf
项目“修补”正确的文件;但是我使用的是一个我不太懂的构建系统的项目 - 所以一开始我只想复制标题。
现在,我不太确定,但在我看来好像gnulib
会根据运行的系统生成这些标头 - 这就是为什么不是逐字地包含netinet/in.h
,它实际上包含:
gnulib_git$ find . -name '*.h' | grep netinet
./lib/netinet_in.in.h
实际上,这个文件有像@PRAGMA_SYSTEM_HEADER@
这样的东西,我只能假设它是一些宏。
所以,我发现有一个命令--create-testdir
,所以我尝试了这样:
rm -rf /tmp/AA # erase previous, else it won't run
./gnulib-tool --create-testdir --dir=/tmp/AA getsockname getsockopt setsockopt socket socketlib sockets socklen sys_socket arpa_inet inet_ntop inet_pton netinet_in
cd /tmp/AA
./configure
make
我在Linux上试过这个,但运行正常,但是:
$ find /tmp/AA -name '*.h' | grep netinet
/tmp/AA/gllib/netinet_in.in.h
...我仍然没有得到任何标题(并且内部仍有宏)?原来我不能在我的MinGW-W64上尝试这个,因为那里没有aclocal
程序......
那么有人可以解释是否可以使用--create-testdir
生成完整的头文件,或者在进程中如何/何时可以获得实际的头文件(以及它是否依赖于主机操作系统)?
答案 0 :(得分:0)
当gnulib发现系统的同名包含文件功能完全时,它不会创建自己的netinet/in.h
文件 - 幸运的是glibc系统就是这种情况。
但是在其他平台上,比如mingw,可能会有一个由gnulib创建的netinet/in.h
文件,它将引用系统的同名include文件。是的,@PRAGMA_SYSTEM_HEADER@
是使这成为可能的宏观的一部分。
您不需要在目标系统上安装Autotools(此处:mingw)。 GNU构建系统的想法是,您可以在具有Autotools的计算机上创建configure
,Makefile.in
和config.h
文件。然后,您可以将生成的包传输到目标计算机。在目标计算机上,根据GNU standards,您只需要基本的shell实用程序(例如coreutils,sed,gawk)。