1

我最终遇到了与 MinGW 上的 gnulib 入门相同的问题,并且对 autotools 不熟悉(足够) ——也就是说,想要netinet/in.h在 MinGW Windows 项目中包含标头;那是我第一次听说的地方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,或者在此过程中如何/何时可以期望获得实际的标头(以及它是否依赖于主机操作系统)?

4

1 回答 1

0

netinet/in.h当 gnulib发现系统的同名包含文件功能齐全时,它不会创建自己的文件 - 幸运的是,在 glibc 系统上就是这种情况。

但是在其他平台上,比如mingw,很可能会有一个netinet/in.hgnulib创建的文件,它会引用系统的同名包含文件。是的,@PRAGMA_SYSTEM_HEADER@是使这成为可能的宏观学的一部分。

您不需要在目标系统上安装 Autotools(此处为:mingw)。GNU 构建系统的理念是您在使用 Autotools 的机器上创建configureMakefile.inconfig.h文件。然后您可以将生成的包传输到目标机器。在目标机器上,根据GNU 标准,您只需要基本的 shell 实用程序(例如 coreutils、sed、gawk)。

于 2017-02-13T03:55:41.283 回答