GNU make-Makefile文件简介
Makefile简介
Makefile
是一种特殊格式的文件,被make
工具使用来管理软件的构建过程。Makefile
定义了一组规则和依赖关系,告诉make
如何编译和链接程序。
Makefile语句
TARGET: PREREQUISTS
COMMAND
Makefile
的语句由上述三部分组成,例如target: hello prerequists: hello.c command: gcc hello.c -o hello
hello: hello.c
gcc hello.c -o hello
Makefile引用
$@
指代当前TARGET
Makefile变量
递归展开方式变量
这一类型的定义由
=
进行定义,此时是严格的文本替换。例如:xs = mh
ns = $(xs)
all:;
echo $(ns)
在执行语句时,首先,
echo $(ns)
会替换为echo $(xs)
然后才会替换成echo mh
。这就是递归的进行替换。直接展开方式变量
这一类型的定义由
:=
进行定义,在变量定义时就展开。ns := $(xs)
xs = mh
此时由于
ns
是直接展开的,如果xs
定义在后面,此时ns
会直接变为空,无法完成对xs
变量的引用。
Makefile伪目标
伪目标使用.PHONY
进行声明,其后的值如share
,此语句表明share
并不是真正的目标,只执行后续的命令,而不生成目标。
.PHONY: shared
shared: # 不生成shared目标文件
ls
Makefile实例
CC = gcc
APP = webserver
SRCS-y := reactor.c webserver.c websocket.c
all: shared
.PHONY: shared build
shared: build/$(APP)-shared
ln -sf $(APP)-shared build/$(APP)
build/$(APP)-shared: $(SRCS-y) | build
$(CC) $(SRCS-y) -o $@
build:
@mkdir -p $@ # @不打印命令
注意
Makefile
在vscode
中使用时可能会报错"make: *** No rule to make target '@mkdir', needed by 'build'. Stop."
原因:
vscode
中的tab
可能默认为四个空格解法:将
tab
修改为非四个空格
GNU make-Makefile文件简介的更多相关文章
- GNU的makefile文件编写说明
这篇文章讲的相当详细,转来收藏: linux下Makefile学习 MAC
- 面试题----makefile文件的作用
make工具和makefile文件 make工具和makefile文件简介 make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具.它不仅常被用于控制源代码的编译和链接,而且还 ...
- 简介make命令和makefile文件
一.为什么要用到 make 命令和 makefile 文件 在 Linux 下编写一个程序,每次编译都需要在命令行一行一行的敲命令.如果是一个很小的程序还好说,命令不怎的复杂,编译速度也挺快,但是对于 ...
- 例解 autoconf 和 automake 生成 Makefile 文件
本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法.主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置 Con ...
- 使用autoconf和automake生成Makefile文件(转)
Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...
- 【C编程基础】make命令和makefile文件
1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile). ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
随机推荐
- PowerBuilder编程新思维10.5:外传2(PowerPlume下一代开发解决方案)
万里归来年愈少 PB编程新思维10.5:外传2(PowerPlume下一代解决方案) 前言 今天我们就来盘点一下,PB下一代开发的所有技术可能性.所谓下一代开发技术,就是指脱离或半脱离PBVM的应用开 ...
- oeasy教您玩转vim - 46 - # 范围控制
范围控制 回忆上节课内容 这次我们主要就是看命令行 首先是选择一个 [range] 这个范围 然后进行相应的操作 :11,30d :2,7y 还可以指定寄存器 :"a3,40y :&qu ...
- 配置Sprig security后Post请求无法使用
在学习过程中发现在配置完Spring security后,Post请求失效,无法增删改数据,这里可以通过在Spring Security 的Config类中增加 也可以自定义csrf,不过目前还不是很 ...
- 如何查询MySQL存储的树形结构,层次结构
表定义如下 如果我们需要在表中查询这个树状结构,通过SQL语句,有两种查询方法: 1.通过inner自连接查询,适用于简单的结构 SELECT * FROM course_category AS on ...
- mysql DCL常用命令
登录数据库: mysql -u root -p 查看本机MySQL中所有的用户 select user ,host from mysql.user; 查看所有数据库: show databases; ...
- docker nginx容器的均衡负载
创建三个docker容器以实现nginx的负载均衡 编写nginx的dockfile [root@docker nginx]# cat Dockerfile FROM nginx RUN echo ' ...
- Jmeter函数助手21-evalVar
evalVar函数用于执行变量表达式. 变量的名称:填入变量的名称name.注意不是引用变量${name} 1.evalVar函数和eval函数的区别:evalVar只能接收变量名称:eval能接收引 ...
- 【POI】Excel数据导入
Postman请求方式: Controller接口代码: /** * /partImport/part/importUpload * @param importFile * @return */ @P ...
- 【Git】Gitee 码云的使用
1.注册.登陆.设置配置 以上步骤省略,不需要太多指示操作 2.配置SSH公钥: 先进入自己的用户目录下面 C:\Users\Administrator\ 然后右键空白位置[Git Bash Here ...
- 【Maven】概念知识
怎么在Windows安装Maven https://www.cnblogs.com/mindzone/p/12701416.html 学到一个新的指令:查看相对系统变量 echo %XXX_HOME% ...