我在某种程度上遇到了与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生成完整的报头,或者在这个过程中如何/何时可以获得实际的报头(以及它是否依赖于主机操作系统)?
发布于 2017-02-13 11:55:41
当gnulib发现同名系统的包含文件功能齐全时,它不会创建自己的netinet/in.h文件--幸运的是,在glibc系统上就是这种情况。
但在其他平台上,如mingw,可能会有一个由gnulib创建的netinet/in.h文件,它将引用系统的同名包含文件。是的,@PRAGMA_SYSTEM_HEADER@是使这成为可能的宏观理论的一部分。
您不需要在目标系统上安装Autotools (此处: mingw)。GNU build system的思想是使用Autotools在机器上创建configure、Makefile.in和config.h文件。然后,您可以将结果包传输到目标计算机。在目标机器上,根据GNU standards,您只需要基本的shell实用程序(比如coreutils、sed、gawk)。
https://stackoverflow.com/questions/37520407
复制相似问题