IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Makefile简介与使用 -> 正文阅读

[开发工具]Makefile简介与使用

概念

代码变成可执行文件,叫做编译(compile);
先编译这个,还是先编译那个(即编译的顺序安排),叫做构建(build)。
Make是最常用的构建工具。也就是将编译的顺序写在一个叫Makefile的文件中。Make命令依赖这个文件进行构建。
构建规则都写在Makefile文件里面,要学会如何Make命令,就必须学会如何编写Makefile文件。

常规gcc编译运行过程

gcc -c test.cpp test1.cpp test2.cpp
进行编译可以生成.o文件
test1.cpp test1.o test2.cpp test2.o test.cpp test.o

gcc -o app test1.o
链接生成可执行文件

然后运行该程序
./app

makefile的出现(选择性编译)

https://www.cnblogs.com/lfri/p/9693545.html
我们编译链接三个文件成可执行文件,可以执行下面两步
gcc -c test.cpp test1.cpp test2.cpp
gcc -o main test.o test1.o test2.o
这样的话我们也可以产生main程序,并不复杂。
但是如果我们考虑一下如果我们修改了其中的一个文件那么我们难道还要重新输入上面的命令? 也许你会说,这个很容易解决啊,我写一个 SHELL脚本,每次执行一下就可以了。对于这个简单程序来说,是没问题。但,如果我们的程序有几百个源程序的时候,那么我们编译器会一个一个源文件重新编译?每次这个编译时间就很长了。

而make正是帮我们解决这个问题的,当我们修改某个文件的时候他只会编译其中修改了的文件,而不会编译其他文件。大大缩短了编译时间。

makefile使用示例

下面我们编写一个最简单的Make file文件。
先编写好源文件(.c文件),然后在同一目录下新建名为Makefile(之前首字母必须大写,现在大小写都行)的文本文件。

hello: test.cpp
	gcc -c test.cpp
	gcc -o app test.o

然后执行make,编译完成后生成可执行文件,我们再运行程序
在这里插入图片描述
可以使用一些变量来精简语法

#定义变量并赋值
CC = gcc           
CFLAGS = -lm -Wall -g

hello: test.cpp
	$(CC) $(CFLAGS) test.cpp -o app    #引用前面定义的变量,$(变量名),这种形式

在这里插入图片描述

makefile递归过程

CC = gcc
CFLAGS = -O -Wall -m64 -std=gnu89
LIBS = -lm

all: main_max   #必须写成all这样的形式,否则只会生成前一个可执行文件main_max,
#前置条件是两个文件,他不执行语句

# 然后我们看前置条件main_max,他需要三个文件, .c在目录中存在,而其他两个前置条件我们继续向下搜索
# 所以说这个前置条件的查找类似于一个递归的过程
main_max: main_max.c bar.o foo.o # 前置条件是有main_max.c bar.o foo.o,如果前置条件存在,则可以执行下一行的命令
	$(CC) main_max.c bar.o foo.o -o main_max

# 下面两个文件的两个前置条件是这两个.c文件存在,如果存在则编译生成.o文件
foo.o: foo.c
	$(CC) -c foo.c

bar.o: bar.c
	$(CC) -c bar.c


# 下面是防止重命名
.PHONY: clean
clean:
	rm *.o main_max

在这里插入图片描述
执行make条件看到,我们这个是从下往上执行的gcc语句

makefile更多语法

更多语法可以参照阮老师教程
http://www.ruanyifeng.com/blog/2015/02/make.html

CmakeList.txt

简单的解释就是cmake是为了生成makefile而存在,这样我们就不需要再去写makefile了,只需要写简单的CMakeLists.txt即可。
https://blog.csdn.net/u013288190/article/details/113806637
添加一个CmakeList.txt文件

project(hello_jelly)
set(APP_SRC main_max.c)
add_executable(${PROJECT_NAME} main_max.c)
 
#print message
message(${PROJECT_SOURCE_DIR})

然后在该项目的目录下新建build文件夹
在这里插入图片描述
然后我门进入到build目录,执行命令cmake …/
这样产生的所有临时文件都会生成在build目录下,而不影响源码目录的代码。
可以看到生成了很多文件,主要的是生成makefile文件
然后我们执行make就可以编译,并生成可执行文件了。
最后运行可执行文件
在这里插入图片描述

在这里插入图片描述

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:46:03  更:2022-03-30 18:46:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:22:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码