我最终遇到了与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
生成完整的头,或者在这个过程中如何/何时可以获得实际的头(以及它是否依赖于主机操作系统)? 最佳答案
当gnulib发现系统的include文件具有完全的功能时,它不会创建自己的netinet/in.h
文件,幸运的是glibc系统就是这样。
但是在其他平台上,比如mingw,可能会有gnulib创建的netinet/in.h
文件,它会引用系统的同名include文件。是的,@PRAGMA_SYSTEM_HEADER@
是使这成为可能的宏观学的一部分。
你不需要在目标系统上有自动工具(这里是mingw)。gnu构建系统的思想是,在带有autotools的机器上创建configure
、Makefile.in
和config.h
文件。然后可以将生成的包传输到目标计算机。在目标计算机上,根据GNU standards,您只需要基本的shell实用程序(例如coreutils、sed、gawk)。
关于linux - 可以使用gnulib-tool获得netinet/in.h吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37520407/