关于windows下的makefile学习
文中部分引用自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225
windows下makefile环境配置见于:http://www.cnblogs.com/cvbnm/articles/1954872.html
最近我们的助教让我们写一个贪食蛇的小程序,虽然难度并不大,但却对我们的整体编程能力的提高有一定的帮助,其中在他的提供的框架中用到了makefile,我之前代码打了不少,但并没有系统的学习编程,因此对makefile并不了解,今天在网上查了资料后发现windows下的makefile与linux下的makefile有一定的区别,经过几次尝试终于写出了自己的第一个makefile,特此记下。
首先,单文件的makefile较为简单,这里就不提了,主要是多文件的makefile较难掌握。
在我的文件中我写了一下几个文件:main.cpp, map.cpp, map.h, makefile(无后缀名,且此文件名不能更改)
main.cpp:
// 学习编程的小菜鸟 // http://www.cnblogs.com/zhuangshq/ #include <iostream> #include "map.h" using namespace std; int main() { cout << "Hello Makefile!" << endl; run(); return 0; }
map.cpp:
// 学习编程的小菜鸟 // http://www.cnblogs.com/zhuangshq/ #include <iostream> #include "map.h" #ifndef NULL #define NULL 0 #endif // NULL using namespace std; void run() { // loadMap(1); // printMap(); cout << "make success!" << endl; }
map.h:
// 学习编程的小菜鸟 // http://www.cnblogs.com/zhuangshq/ #ifndef MAP_H #define MAP_H // run void run(); #endif
makefile:
// 学习编程的小菜鸟 // http://www.cnblogs.com/zhuangshq/ test: main.o map.o g++ main.o map.o -o test main.o: main.cpp g++ -c main.cpp -o main.o map.o: map.cpp g++ -c map.cpp -o map.o clean: rm *.o *.exe
以上代码实现在main.cpp中调用map.cpp中的run函数,在下面我们来分析makefile的内容:
根据makefile的语法,
target ... : prerequisites ...
command
...
...
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
那么我们的第一行生成的目标文件就是test.exe,而test.exe是由main.o和map.o生成的,接下来的两个语段分别生成了main.o和map.o
接下来我们只需要在上述文件所在的文件夹中打开命令行窗口并执行nmake命令即可生成test.exe,执行nmake clean命令即可删除生成的文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?