热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Makefile初期学习笔记

注:本笔记并不专业,可参考这一博主,由浅入深讲解的很好1.Makefile文件命名a.Makefile文件没有后缀名,命名有

注:本笔记并不专业,可参考这一博主,由浅入深讲解的很好




1. Makefile 文件命名

a. Makefile文件没有后缀名,命名有几种可选,如makefileMakefile,推荐用是Makefile




2. Makefile文件变量赋值

a. 变量的使用可以提高makefile的可维护性。⼀个变量的定义很简单,就是⼀个名字(变量名)后⾯跟上⼀个等号,然后在等号的后⾯放这个变量所期望的值。对于变量的引⽤,则需要采⽤$(变量名)或者${变量名}这种模式。类似C语言中的#define pi 3.14,利用变量来一般化文件名,需要修改时,只需要修改这些变量的定义即可。

CC=gcc
RM=rm
OBJS=main.o a.o
EXE=main
$(EXE):$(OBJS)$(CC) -o $@ $^
%.o:%.c:$(CC) -c -o $@ $^
clean:$(RM) $(EXE) $(OBJS)


b. 对于变量的赋值有四种,分别为
(1)即时赋值 a:=1:赋值后,该变量值即刻等于右值
(2)延时赋值 a=1:赋值后,该变量的值可以随着后续c值的变化而变化
(3)条件赋值 a?=1:如果a已经被定义,则该赋值操作不执行;否则a值等于右值
(4)追加赋值 a+=1:在a值后,以空格隔开追加一个值



c.自动变量
(1)$@:表示目标。存在多个目标时,表示任何造成命令执行的目标
(2)$^:表示所有依赖
&#xff08;3&#xff09;$<&#xff1a;仅表示第一个依赖


3. 利用上述变量可以简化makefile编写&#xff0c;无需每个.o文件都写一遍


4. 假目标&#xff1a;个人理解为防止出现和目标名字相同的文件&#xff0c;所以对真目标的一种保护&#xff0c;这样其他文件均为假目标

CC&#61;gcc
RM&#61;rm
OBJS&#61;main.o a.o
EXE&#61;main
$(EXE):$(OBJS)$(CC) -o $&#64; $^
%.o:%.c:$(CC) -c -o $&#64; $^
clean:$(RM) $(EXE) $(OBJS)
.PHONY clean



5. 函数

a. wildcard函数:通配符函数&#xff0c;形式为$(wildcard patten)
b. patsubst函数 用来进行字符换替换&#xff0c;形式为$(patsubst patten, replacement, text)

c. 应用&#xff1a;对于新增或删减一个.c文件&#xff0c;无需重新修改Makefile&#xff0c;示例如下

CC&#61;gcc
RM&#61;rm
SRCS&#61;$(wildcard *.c)
OBJS&#61;$(patsubst %.c, %.o, $(SRCS))
EXE&#61;main
$(EXE):$(OBJS)$(CC) -o $&#64; $^
%.o:%.c:$(CC) -c -o $&#64; $^
clean:$(RM) $(EXE) $(OBJS)

推荐阅读
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 正在学习操作系统开发,遇到一个内核在GRUB Legacy(0.97)中无法成功引导的问题。具体表现为输入内核命令后显示错误信息,尝试引导时GRUB挂起。 ... [详细]
  • 本文介绍了如何在ARM架构的裸机环境中通过C语言编程点亮LED灯。主要包括初始化栈指针、关闭看门狗以及编写控制LED灯状态的C代码等关键步骤。 ... [详细]
  • C语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 深入解析Spring Boot项目的启动机制
    在Java后端开发中,Spring Boot框架以其简洁性和强大的功能受到了广泛欢迎。本文将探讨Spring Boot项目启动的核心——SpringApplication类及其run()方法的工作原理。 ... [详细]
  • 利用Selenium框架解决SSO单点登录接口无法返回Token的问题
    针对接口自动化测试中遇到的SSO单点登录系统不支持通过API接口返回Token的问题,本文提供了一种解决方案,即通过UI自动化工具Selenium模拟用户登录过程,从浏览器的localStorage或sessionStorage中提取Token。 ... [详细]
  • 本文档详细介绍了Excel VBA编程中的基本语法,包括循环结构、条件判断、数据处理以及用户界面设计等内容,旨在帮助初学者快速掌握VBA编程技巧。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 在Linux系统中,许多应用程序以源代码的形式提供,这给安装带来了挑战。本文旨在介绍一种简化源码软件安装流程的方法,帮助用户更加轻松地完成安装。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
author-avatar
JRamboKing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有