• makefile


    makefile简单用法

    1,执行的时候,如果没有知道目标,则默认执行makefile里的第一个目标,一般项目上都是把all作为第一个目标。

    2,【#】代表注释

    3,函数:

    • wildcast:可以进行文本匹配
    • patsubst:内容替换

    4,系统变量:

    • $@:代表目标
    • $<:代表全部依赖
    • $^:第一个依赖
    • $?:第一个发生了变化的依赖

    5,杂项:

    • 【@】在规则前:代表不在终端中输入改命令
    • 【-】在规则前:代表即便该条命令出错,也往下执行

    6,伪目标用法:

    伪目标【.PHONY】的使用场景是:一般makefile都会有一个clean的目标,为了清理.o文件,但是如果有个文件的名为clean,再执行【make clean】就会提示【make:‘clean’ is up to date.】。也就是说make认为clean已经存在了,没有必要再执行clean了,所以导致clean不能够被执行。【.PHONY】的作用就是告诉make,【.PHONY】后面的目标是不生成任何文件的,所以不会去检查有没有已经存在的clean文件了。

    7,一般项目上的经验:

    • 用all作为伪目标,all后面放实际的目标
    • 【.PHONY】的目标为,clean和all
    • clean的时候,一般在rm命令后面,加-f选项,目的是防止没有删除目标的时候,出错误。

    例子:

    #取得src目录下所有的.c文件
    srcFile=$(wildcard ./src/*.c)
    #把变量srcFile里的.c替换成.o
    objFile=$(patsubst %.c, %.o, $(srcFile))
    
    #伪目标
    all:app
    
    app:$(objFile) main.o
    	gcc -o $@ -I./include $^
    
    %.o:%.c
    	gcc -c $^ -o $@ -I./include
    
    test:
    	@echo $(srcFile)
    	@echo $(objFile)
    
    #伪目标
    .PHONY:clean all
    
    clean:
    	-@rm -f  $(objFile)
    	-@rm -f main.o
    
    

    目录结构:

    ├── include
    │   └── head.h
    ├── main.c
    ├── main.o
    ├── makefile
    ├── obj
    └── src
        ├── add.c
        ├── add.o
        ├── mul.c
        ├── mul.o
        ├── sub.c
        └── sub.o
    

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    数组中找出最小的K个数
    温故而知新---Java(一)
    写一手简洁的代码
    同步IO与同步非阻塞IO的理解
    旋转打印矩阵
    求仅出现一次的最早字符
    spring 自定义schema 加载异常 White spaces are required between publicId and systemId.
    Java位运算知识点整理
    Idea 插件开发之DubboInvoke实践
    pinpoint插件开发实践
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10752010.html
Copyright © 2020-2023  润新知