• Makfile学习1——示例(一步一步完善)


    示例:

    ①基础,根据最基础的规则编写。这条规则的作用:判断这些依赖文件,如果发现某个依赖文件被修改过(make会比较依赖文件和目标文件的时间,比如比目标文件时间新,认为被修改过),就会执行命令,来重新生成目标文件。简单暴力,但是效率低

    test : main.c sub.c sub.h
        gcc -o test main.c sub.c

    ②效率高,相似规则太多太啰嗦,不支持检测头文件

    test : main.o sub.o           #当我们make时没有指定目标,就会去Makefile里查找第一个目标。
        gcc -o test main.o sub.o
    main.o : main.c
        gcc -c -o main.o main.c
    sub.o : sub.c
        gcc -c -o sub.o sub.c

      clean:
       rm *.o test

    ③使用通配符,消除重复规则,效率高,精炼,不支持检测头文件

    test : main.o sub.o
        gcc -o test main.o sub.o
    
    %.o : %.c
        gcc - c -o $@ $<
    
    clean:
        rm *.o test -f

     ④效率高,精炼,支持检测头文件(但是需要手工添加头文件规则)

    test : main.o sub.o
        gcc -o test main.o sub.o
    %.o : %.c
        gcc -c -o $@ $<
    
    sub.o : sub.h
    
    clean:
        rm *.o test -f

    ⑤效率高,精炼,支持自动检测头文件

    objs := main.o sub.o
    test : $(objs)
        gcc -o test $^
    # 需要判断是否存在依赖文件
    # .main.o.d .sub.o.d
    dep_files := $(foreach f, $(objs), .$(f).d)
    dep_files := $(wildcard $(dep_files))
    # 把依赖文件包含进来
    ifneq ($(dep_files),)
        include $(dep_files)
    endif
    %.o : %.c
        gcc -Wp,-MD,.$@.d -c -o $@ $<
    clean:
        rm *.o test -f
    distclean:
        rm $(dep_files) *.o test -f



    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    丁丁杂想
    Tomcat5.5Ubuntu手记之编程
    插入递归引用Identity列的记录
    evolution错误Ubuntu手记之系统配置
    硬盘安装Ubuntu手记
    WAS安装及概念
    丁丁病了『续』
    web.config中配置字符串中特殊字符的处理
    新宝宝睡眠护理全方位【转】
    丁丁病了
  • 原文地址:https://www.cnblogs.com/Rainingday/p/12860405.html
Copyright © 2020-2023  润新知