哪位大佬来看一个Makefile中的选项

发布于 2022-09-18 04:47:49 字数 1679 浏览 13 评论 0

软件是iptables 1.4.5的extensions/GNUmakefile.in:

  1. AM_DEPFLAGS     = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@

复制代码

  1. init%.o: init%.c
  2.         ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;

复制代码

我知道-Wp是把后面的几个逗号分隔的参数传给Preprocessor,@的几个是用文件名和路径替换,但整体上还是有点儿糊涂。

这所以对这个有兴趣是因为我用的交叉编译器加上这个编译就会失败,而且出错的信息有点奇怪,下面是单个文件手工编译时的信息:

  1. tile-gcc -Wp,-MMD,./.initext4.o.d,-MT,initext4.o -D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64         -D_REENTRANT -Wall -Waggregate-return -Wmissing-declarations    -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes    -Winline -pipe  -DXTABLES_LIBDIR=\"/home/Cyberman/iptables-1.4.5/x86_64_build/libexec/xtables\" -DXTABLES_INTERNAL -I../include -I../include  -D_INIT=ext4_init -g -O2 -o initext4.o -c initext4.c;
  2. Warning: Unrecognized option ( ) in "-MT"
  3. tile-cc: ignoring unknown warning option -Waggregate-return
  4. tile-cc: ignoring unknown warning option -Wredundant-decls
  5. tile-cc: ignoring unknown warning option -Winline
  6. "initext4.c": Error: Can't open intermediate compiler file (/tmp/ctmB.6HstQU): Invalid argument

复制代码

当然我们的编译器只是模仿了GCC的选项,不是直接用GCC实现的,所以有这种差异也很正常。目前我是直接去掉这个完成编译的,但真正要用还是需要正解原来的Makefile中为什么使用这个,如去掉了会不会导致头文件修改之后不重新编译等。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

关于从前 2022-09-25 04:47:49

-MT是表示在生成.d文件的时候使用你指定的字符串作为目标,而不是默认的将.c换成.o

天邊彩虹 2022-09-25 04:47:49

原帖由 lllaaa 于 2009-11-5 16:27 发表
-MT是表示在生成.d文件的时候使用你指定的字符串作为目标,而不是默认的将.c换成.o

单纯的一个-MT我还大概知道,但这几个连在一起我看得有点糊涂了。我现在最关心的是这个去掉有多大影响,因为我的编译器虽然支持GCC选项,但不是100%兼容的,加上这个就出错。如果只是依赖视别,那大不了每次干脆clean了重编,反正软件不大,我的4核工作站用-j 4编译它还是很快的。

时光倒影 2022-09-25 04:47:49

那可以看看生成的.d文件。如果目标和依赖没错就没问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文