zoukankan      html  css  js  c++  java
  • gcc参数之依赖生成

    先列出以下几条命令:

    1. gcc -M c.c :打印出依赖,预处理结束就停止编译。
    2. gcc -M -MF c.d c.c:把依赖写入文件c.d,预处理结束就停止编译。
    3. gcc -c -o c.o c.c -MD -MF c.d:编译c.c输出目标文件为c.o, 并把把依赖写入文件c.d。

    4. gcc -c -o c.o  -Wp,-MD,c.d :与3等价。使用-Wp是仅传递参数给预处理阶段使用。

    参数详解:

    -M  不是输出预编译过程的结果,而是输出一个用于make的规则,该规则描述了这个源文件的依赖关系。预编译器输出的这个make规则包含名字与原文件相同的目标文件,冒号和所有include文件的名字。

    -MM  与-M相似,只是不包含系统头文件

    -MF file  将依赖关系写到文件file中

    -MT target  重新定义目标对象名。默认的依赖目标名为% (编译生成的%.o)。

    -MD/MMD  默认将生成的依赖文件写入%.d(编译生成的%.o)中。可以用-MF指定文件来覆盖。

    示例makefile如下:

    objs = a.o b.o c.o
    
    dep_files := $(patsubst %,.%.d, $(objs))
    dep_files := $(wildcard $(dep_files))
    
    test: $(objs)
    gcc -o test $^
    
    ifneq ($(dep_files),)
    include $(dep_files)
    endif
    
    %.o : %.c
    gcc -c -o $@ $< -MD -MF .$@.d
    
    clean:
    rm *.o test
    
    distclean:
    rm $(dep_files)
    
    .PHONY: clean
  • 相关阅读:
    Android MulticastSocket IP组播
    IP组播技术介绍及实现例子
    机器学习:多变量线性回归
    慘挂阿里笔试题
    Android使用am命令实现拨打电话、打开应用
    社交O2O的进化
    hibernate4中HHH000273的错误
    Java中常见的排序算法
    Axure实现淡入淡出效果
    Ubuntu虚拟机+ROS+Android开发环境配置笔记
  • 原文地址:https://www.cnblogs.com/yangjiguang/p/11625618.html
Copyright © 2011-2022 走看看