前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利。在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮,就能将工程的所有源码进行编译运行。而在Linux下,工程源文件的编写往往是使用一个简单的编辑器(VIM),然后通过Makefile文件进行自动化编译。而我接下来想说的是,如何在Windows上如同Linux般使用Makefile文件进行编译。可能有人觉得没那个必要,因为Windows的开发工具数不胜数,随便一个都非常好用,不可否认,懂得利用开发工具开发是可大大提高开发效率。当然,接下我是从基础的知识出发,不仅仅是对Makefile文件的学习,从中还可帮你解开以往的一些疑惑,或者让你学习到一些新的有趣的知识。
1.搭建环境
1.gcc编译器下载,TDM-GCC,打开根据自己电脑的类型选择合适的程序,我的是win7/32bit,所以选择下载第一个:
2.下载完成后,以管理员方式打开安装程序,点击Create后:
3.选择相应的版本,点击Next,接下来会选择安装路径,自己随便选择一个不带中文的路径就行。
4.最后点击Install进行安装,安装完成后,可以在自己设置的安装路径下有这么一个文件夹“TDM-GCC-32”,接下来配置环境变量。打开控制面板 > 系统和安全 > 系统 >高级系统设置 > 环境变量:
添加系统变量,变量值是自己刚刚选择的安装路径,我安装在C盘,如下图:
找到变量Path,在后面加入 “;%GCC_PATH%\bin”,如图:
点击确定保存设置。
5.点击电脑桌面左下角,搜索cmd,以管理员身份打开cmd.exe,输入“gcc -v”:
得到如上输出可确认gcc编译器已正确安装,版本是5.1.0。
6.继续输入“mingw32-make -v”:
相对于Linux的make不同,这里是mingw32-make,在cmd里用cd命令切换在Makeflie文件所在目录,命令行输入mingw32-make回车运行,就行执行Makefile文件,进行自动化编译。
2.执行一个简单的Makefile文件:
1.将下面各个文件保存在同一目录下:
"src_a.c"
#include "stdio.h"
void funca()
{
printf("funca runing!!!\r\n");
}
"src_b.c"
#include "stdio.h"
void funcb()
{
printf("funcb runing!!!\r\n");
}
"src_c.c"
#include "stdio.h"
void funcc()
{
printf("funcc runing!!!\r\n");
}
"main.c"
#include "stdio.h"
extern void funca();
extern void funcb();
extern void funcc();
int main()
{
funca();
funcb();
funcc();
}
"Makefile"
mian : main.o src_a.o src_b.o src_c.o
gcc main.o src_a.o src_b.o src_c.o -o main
main.o : main.c
gcc main.c -c -o main.o
src_a.o : src_a.c
gcc src_a.c -c -o src_a.o
src_b.o : src_b.c
gcc src_b.c -c -o src_b.o
src_c.o : src_c.c
gcc src_c.c -c -o src_c.o
.PHONY : clean
clean:
del *.o main.exe -rf
Makefile可以暂时不用理解,这里只是一个简单通俗的例子。
所有文件创建完成如下:
2.打开cmd,切换到以上的目录,输入“mingw32-make”:
得到main.exe可执行文件,输入main.exe回车运行:
然后在资源管理器里查看Test目录会发现多了一些编译的过程文件(.o):
cmd输入命令“”mingw32-make clean”,将输出文件删除:
到此,我可以在Windows下利用CMD命令通过Makefile对源文件进行编译运行了。
环境搭建好了之后,再从学习gcc命令开始,才能逐步理解Makefile文件。
【推荐阅读】
virtio-net 实现机制【一】(图文并茂)
浅析linux内核网络协议栈--linux bridge
深度解析linux内核模块编译makefile