首页 > 其他分享 >MakeFile编写深入进阶

MakeFile编写深入进阶

时间:2022-09-28 09:44:07浏览次数:55  
标签:文件 %. 进阶 TAR CC MakeFile make Makefile 编写

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

Makefile里有什么?

  Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。

  1. 显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。

  2. 隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。

  3. 变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。

  4. 文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。

  5.  注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“\#”。

  最后,还值得一提的是,在Makefile中的命令,必须要以[Tab]键开始。

 

技能点:

-命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事

.PHONY:   伪目标,需要make后跟指令名称才能执行

 

变量   = (替换)     TAR= test   OBJ=circle.o cube.o main.o

+= (追加)         TAR += test

:=(恒等于)      CC := gcc

使用变量时   $(变量名)   替换

$(TAR) : $(OBJ)

  $(CC)  $(OBJ)  -o $(TAR)

 

隐含规则       %.c  %.o  任意的.c或者.o     *.c  *.o  所有的.c   .o  

%.o : % .c

  $ (CC)  -o  %.c  -o  %.o

 

通配符  $^ 所有的目标文件    $@所有的依赖文件   $< 所有的依赖文件的第一个文件

$(TAR):$(OBJ)

  $(CC)  $^  -o   $@

%.o : %.c

  $(CC)  -c  $^  -o  $@

 

标签:文件,%.,进阶,TAR,CC,MakeFile,make,Makefile,编写
From: https://www.cnblogs.com/ucas123/p/16735541.html

相关文章

  • Makefile学习笔记
    基本格式target:dependence command#冒号之前是目标名,冒号之后是依赖#每个command独占一行,每行之前必须有一个tab.phony:clean clean-command#以.phony修饰,使......
  • 如何将编写的c语言程序打包成exe可执行文件呢?
    如何将编写的c语言程序打包成exe可执行文件呢?以前我们写程序很多是在编辑器上,让编辑起来编译运行我们的程序。如果想将其打包成exe可执行文件该如何做?我这里推荐使用code......
  • C++学习之指针进阶(转载)
    1指针和数组作用:利用指针访问数组中元素示例:intarr[]={1,2,3,4,5,6,7,8,9,10};int*p=arr;//指向数组的指针cout<<"第一个元素:"<<arr[0]<<endl;......
  • python进阶之路5
    作业讲解1.获取用户输入并打印成下列格式 ------------infoofJason-----------Name:JasonAge:18Sex:maleJob:Teacher-------......
  • 分文件编写时成员函数的声明和定义要同时进行
    最近在做census变换项目在分步骤调试初期遇到了这个错误:  仔细一看时声明的构造函数和析构析构函数出现了问题:  对比了一下别人写的分文件代码发现析构函数和构造......
  • 前端面试总结06-异步进阶
    1.事件循环(1:JS是单线程运行的(2:异步要基于回调来实现(3:eventloop就是异步回调的实现原理2.JS如何执行从前到后一行一行执行如果某一行执行报错,则停止下面代码的执行......
  • vue(7)v-model进阶使用
    序简单讲解v-model双向数据绑定的使用,过于简单就不写描述啦,看代码,工具是HBuilderX示例<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></ti......
  • Java 进阶
    Java进阶1.数组1.1数组的创建注意:new是在堆中创建一个数组或者在堆中分配一块连续的存储空间,把这块空间的引用赋值给数组名还有需要注意的是,数组定义了之后,系统会给......
  • 【数据库】Postgresql/PG-编写函数实现字段对应加备注
    〇、资料链接 一、背景构建分区表时,删除了表的字段备注信息1、查询语句selectc.relname表名,cast(obj_description(relfilenode,'pg_class')asvarc......
  • python进阶之路4
    内容回顾PEP8规范代码编写规范及美观python注释语法平时养成写注释的习惯 1.警号 2.三个单引号 3.三个双引号常量与变量1.变量语法结构 变量名......