博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
-MD ,自动生成依赖文件
阅读量:5297 次
发布时间:2019-06-14

本文共 2755 字,大约阅读时间需要 9 分钟。

1.

Options Controlling the Preprocessor

       These options control the C preprocessor, which is run on each C source file before actual compilation.
       If you use the -E option, nothing is done except preprocessing.  Some of these options make sense only together with -E because they cause the
       preprocessor output to be unsuitable for actual compilation.
           You can use -Wp,option to bypass the compiler driver and pass option directly through to the preprocessor.  If option contains commas, it is
           split into multiple options at the commas.  However, many options are modified, translated or interpreted by the compiler driver before being
           passed to the preprocessor, and -Wp forcibly bypasses this phase. (为什么要绕过compiler driver呢?哪些选择会被compiler修改,翻译和解释呢?) The preprocessor's direct interface is undocumented and subject to change,
           so whenever possible you should avoid using -Wp and let the driver handle the options instead.
  -MD -MD is equivalent to -M -MF file, except that -E is not implied.(这是默认没有-E选项的意思吧)  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 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 process.

 

解释和回答:

  这个是说 最好不要用Wp选项吧, 让编译器处理传递给他的参数,编译器可能会对这个参数做出一些改动。 除非你确定你能做的更好,不需要编译器替你这么做。强制掠过该过程;

MD 是用来生成依赖文件的? 应该是给Makefile用的吧 -M 和-MD -MF一样,D生成的文件会有 .d 后缀 F是吧输出到指定文件。

 

2.

cc -M 参数你应该了解吧,比如我有一个t.c,内容是#include 
#include
int test(){return 0;}gcc -c -M t.c 不会编译t.c,而是输出t.o (t.c对应的目标文件)的依赖关系(用于makefile),比如在我的系统上输出:t.o: t.c /usr/include/stdio.h /usr/include/features.h \ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \ /usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include/stddef.h \ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ /usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include/stdarg.h \ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ /usr/include/string.h /usr/include/xlocale.h如果你想让依赖关系打印到文件,而不是标准输出,那么可以用gcc -M -MF file t.c上面的内容就会保存到 file 里。默认的, -M参数意味着-E参数同时也生效, -E参数的用处是只进行预编译,而不会编译出真正的目标文件 (t.o)有了上面的概念,就可以理解 -MD了,比如gcc -c -MD t.c就会生成 t.d (保存前面说国的依赖关系), t.o (t.c编译后的目标文件,之所以会产生是因为 -E参数在-MD的时候默认是关闭的)gcc -c -o p.o -MD t.c就会声称 p.o 和 p.d (保存依赖关系),这是因为你用了-o参数指定了名字
赞同
 
====
http://zhidao.baidu.com/question/142520559 

 

转载于:https://www.cnblogs.com/tureno/articles/6207452.html

你可能感兴趣的文章
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>