• 关于makefile


    makefile功能

    make工具最主要的功能就是通过编写makefile文件来描述源程序之间相互关系,并且自动维护编译工作
    在UNIX系统中习惯使用Makefile作为makefile文件,如果要使用其他文件,例如libXXXX.mk就需要通过参数-f来指定我们的makefile文件

    make -f libXXXX.mk
    

    书写规则(依赖关系、生成目标方法)

    targets:prerequistes
    	command
    

    例如:

    main:main.c
    	gcc main.c -o main
    

    targets是我们最终想要得到的目标文件名
    command是得到最终文件所需要执行的命令
    prerequistes是获取目标文件的先决条件(源文件)

    如果我们想定义一系列比较类似的文件就可以使用通配符例如:

    clean:
    	rm -f *.o
    
    clean:
    	cat main.c
    	rm -f *.o
    

    wildcard和patsubst

    如果使用通配符表示一系列文件并且赋值给变量例如

    object = *.c
    

    object的值将会是*.c,并不会是*.c文件的展开,如果需要表示.c文件基于需要使用wildcard函数这样就能使object表示为.c文件的名的集合

    object = ${wildcard *.c}
    

    而patsubst的名称为模式字符串替换函数

    ${patsubst <pattern>, <replacement>, <text>}
    

    含义为在中单词(以空格、换行、tab分隔)是否符合模式如果模式匹配就使用替换(可以包含通配符%)

    src = ${wildcard *.c}
    obj = ${patsubst %.c, %.o, ${src}}
    

    伪目标

    clean:
    	rm -f *.o
    

    伪目标不是一个文件,只是一个标签,所以make无法生成它的依赖关系和是否执行,我们只有显示的指明这个目标才能让其生效,为了避免和文件重名我们可以使用一个特殊符号.PHONY来显式指明一个目标就是伪目标,向make说明不管是否有这个文件这个目标就是伪目标,只要有这个声明不管是否有这个文件要运行clean就可以make clean使用

    .PHONY : clean
    clean :
    	rm *.o temp
    

    变量和自动变量

    在makefile中变量用作$(obj)(常用)或${obj}, #表示注释
    $@:在规则命令中,表示规则中的目标
    $^:在规则命令中,表示所有依赖条件
    $<:在规则命令中,第一个依赖条件(如果应用在模式规则中,可以将依赖条件列表中的依赖依次取出,套用模式规则)

    main:main.c
    	gcc main.c -o main
    
    main:main.c
    	gcc main.c -o $@
    
    main:main.c
    	gcc $^ -o $@
    
    main:main.c
    	gcc $< -o $@
    
    ALL:main
    WALL = -Wall
    CC = gcc
    src = $(wildcard *.c)
    obj = $(patsubst %.c, %.o, $(src))
    main:$(obj)
    	$(CC) $^ -o $@ $(WALL)
    %.o:%.c
    	$(CC) -c $< -o $@
    .PHONY:clean
    clean:
    	rm -rf *.o main
    
  • 相关阅读:
    图形界面四则运算计算器(Python+PyQt5)
    C++学习记录1
    结构模式-适配器模式
    Java项目:ssm图书商城系统
    基于Java+SpringBoot+Vue前后端分离流浪动物管理系统设计和实现
    Kubernetes:Ingress总结(二)
    【构建ML驱动的应用程序】第 1 章 :从产品目标到 ML 框架
    大话C# WPF基础入门进阶,深入浅出解析章节教程 9 循环入门2初级点
    Oracle for Windows安装和配置——Oracle for Windows软件安装
    [AHK V2]SQLite测试用例
  • 原文地址:https://blog.csdn.net/m0_51765675/article/details/127038723