在写makefile文件之前我们先了解一下编译器在生成可执行文件过程中都经历了哪些步骤:
以gcc编译main.c为例:
1、预处理器按照预处理指令开始对源代码main.c进行加工,生成预编译文件main.i
gcc -E main.c
2、将main.i文件编译成汇编语言文件main.s
gcc -S main.c -o main.s
3、将main.s汇编成机器语言,目标文件main.o
gcc -c main.s
4、将main.o和运行环境或库文件绑定,生成可执行文件a.out
gcc main.o
以上四个步骤可以用一条简单且常见的命令完成:
gcc main.c
补充一下gcc各参数的含义:
-E 预处理
-S 将语言编译成汇编
-c 将汇编或者c语句翻译成目标文件,即机器语言
-o 指定输出文件的名字
各文件后缀的含义:
.c 源文件
.i 预处理后的文件
.s 汇编语言文件
.o 目标文件
接下来看下实际项目中makefile文件的编写,该项目为简单的tcp通信项目,目录结构如下:
LServer:服务器
LClient:客户端
common:公共的工具函数及类(服务器调用的服务器类和客户端调用的客户端类皆在其中)
服务器代码如下:
代码中只是简单的创建一个服务器类对象,然后调用成员函数CreateServer来对服务器进行实现。如果不使用makefile直接编译的话需要下面的指令(直接用g++编译器进行操作):
g++ -c main.cpp (生成main.o文件)
g++ -c ../common/server/server.cpp (生成server.o文件)
g++ -o main main.o server.o (生成main可执行文件)
如果项目内的文件很多的话编译的时候会非常麻烦,这时候就可以使用makefile文件了。同样的生成main可执行文件需要的makefile文件内容如下:
makefile文件写好之后,执行make命令就可以生成想要可执行文件了。需要特别注意的是每条g++命令前必须是tab不能是空格。
最后,提交一下git:
git add --all .
git commit -m "create makefile"
git status
git push -u origin master
git log