前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >makefile从入门到入门

makefile从入门到入门

作者头像
震八方紫面昆仑侠
发布2020-08-12 14:32:13
1.3K0
发布2020-08-12 14:32:13
举报

makefile文件是用来帮助编译和管理C++项目代码的,需要配合make命令使用。makefile里也可以执行其它shell操作,具备一部分.sh脚本的功能。 makefile内容的编写按照如下规则

代码语言:javascript
复制
目标1:依赖1
  命令1

目标2:依赖2
  命令2

目标3:依赖3
  命令3
.........................
目标N:依赖N
            命令N

命令可以是任意的shell语句。多数情况下,命令都是起到了从依赖生成目标的功能。例如从.cpp文件生成.o文件,那么命令一定包括g++和一些编译参数的完整的编译命令。 目标1 2 3可以是嵌套依赖的,如果依赖1里包含目标2 目标3,那就是一种嵌套的依赖。也可以是独立的,例如目标1 2 3就是三个独立的可执行文件,或者三个动态库,那么他们之间是可以完全没有依赖关系的,写在一个makefile文件里只是便于统一管理。 命令前要以一个tab开头 。如果使用空格代替tab,执行make命令时会报

代码语言:javascript
复制
[root@localhost makefiletest]# make
makefile:5: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.

以下面简单的C++代码为例,说明makefile的具体使用。

源代码文件test.cpp

代码语言:javascript
复制
#include <string>
#include <iostream>
#include<iomanip>

int main(int argc, char** argv)
{
using namespace std;
int i =1 ;
int j = 2;
        j += 3;
cout << j<<endl;
}

makefile文件,文件就是makefile

代码语言:javascript
复制
CC=g++
all = test.o

test: $(all)
$(CC) -o test $(all)

test.o: ./test.cpp
$(CC) -c test.cpp

clear:
        rm -f *.o test

执行make命令

代码语言:javascript
复制
[root@localhost makefiletest]# make
g++ -c test.cpp
g++ -o test test.o
[root@localhost makefiletest]# ls -lrt
total 24
-rw-r--r--. 1 root root  196 Aug  6 11:00 test.cpp
-rw-r--r--. 1 root root  120 Aug  6 11:04 makefile
-rw-r--r--. 1 root root 2328 Aug  6 11:04 test.o
-rwxr-xr-x. 1 root root 8840 Aug  6 11:04 test

正确生成了test test.o

makefile中的“目标1”test是个可执行文件,也是最终我们需要的东西。test依赖(all)这个变量,文件开头定义了all = test.o,所以test依赖的是test.o,生成test的命令是(CC) -o test

代码语言:javascript
复制
[root@bogon makefiletest]# make clear
rm -f *.o test

如果不执行make clear清理之前的.o文件,make会比较.o和.cpp谁更新,如果依赖文件cpp更新,重新编译这个.o,否则不重新编译。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL从删库到跑路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档