一个GCC问题,-MMD的

发布于 2022-09-12 03:33:52 字数 2085 浏览 14 评论 1

一个project的Makefile中,有这么几行:

  1.   9 .c.o:
  2. 10         $(CC) $(CFLAGS) -MMD -o $@ -c $<
  3. 11         @cp $*.d $*.P;
  4. 12          sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\$//'
  5. 13              -e '/^$/ d' -e 's/$/ :/' < $*.d >> $*.P;
  6. 14         rm -f $*.d
  7. 15

复制代码当$@是 AMD/MSR-K6时, gcc有时在当前目录产生MSR-K6.d文件,有时产生AMD/MSR-K6.d文件。 RHEL5/Fedora8是第一种情况,而有人说Fedora12、13是第二种情况。

这就导致第11行的cp命令没法写。  如果指定cp的源文件是$*.d,则在F8、RHEL上出错; 如果指定$(*F).d,则在F12、F13上出错。

有没有办法,强制gcc产生AMD/MSR-K6.d?  也就是说,即使指定了-o选项,也要gcc采用 输入文件的pathname、只是把*.c换成*.d?

man gcc这么说的:

       -MD -MD is equivalent to -M -MF file, except that -E is not implied.  The driver determines file based on whether an -o
           option is given.  If it is, the driver uses its argument but with a suffix of .d, otherwise it take the basename of the
           input file and applies a .d suffix.

           If -MD is used in conjunction with -E, any -o switch is understood to specify the dependency output file (but
           @pxref{dashMF,,-MF}), but if used without -E, each -o is understood to specify a target object file.

           Since -E is not implied, -MD can be used to generate a dependency output file as a side-effect of the compilation pro-
           cess.

       -MMD
           Like -MD except mention only user header files, not system header files.

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

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

发布评论

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

评论(1

故人的歌 2022-09-19 16:05:24

或者可以考虑在cp之前,加一条判断语句

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