您的位置:首页 > 其它

编译环境搭建:Makefile

2013-08-08 11:03 183 查看

前言

********************************************************************************************************************

本系列文章所提供的算法均在以下环境下编译通过。

【算法编译环境】Federa 8,linux 2.6.35.6-45.fc14.i686

【处理器】 Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz

【内存】 2025272 kB

如果有问题或者纰漏或者有好的建议更或者有更好的算法,请不吝赐教。

************************************************************************************************************************

正文

长久以来,笔者一直想用一种管理工具,将所编写的测试程序、算法代码以及工程代码统一管理起来。因为有些是用Java写的有些是用C++写的。虽有想法,但却无行动。这又让我想起了昨天晚上看到一部电影里所说,"思想上的巨人,行动上的矮子"。笔者也不想做这种人。要笔耕不辍,要随时随地表达思想。后来通过一段时间学习Makefile。发现其强大,无比强大。

就比如说,我们是用VS2010,或者什么IDE工具,你要做多少操作啊。起码你要编写多个工程,然后右键某个工程,点击编译,运行吧,有时候工程多了还卡。那反过来用Makefile呢?我们只需要make就完全生成我们所需要的程序文件了。方便吧。键盘输入速度比鼠标点来点去方便吧。你明白打魔兽打dota时键盘的重要性了吧。另外在命令行上打make,然后黑屏上一个一个编译文件,是不是有一种高端大气上档次的感觉。

不过其实Makefile确实很好,因为他可以生成多个可执行文件。让你在一个工程底下弄多个main文件。这一点让我很开心。这是其优点一;

我不用修改makefile文件,即使是新加一个包含main的文件代码,我也只需要直接make就OK,可执行文件就直接跑到bin目录下了。甚至都没有obj什么lnk等一大堆乱七八糟的文件。还占空间,用vs的小伙伴们,不是这样吗?



好吧,吐槽了这么多,真心觉得makefile好用。这里我弄上来我的Makefile文件。分享给小伙伴们,大家只要放在某个目录下,不用修改,直接可以编译任意多个main函数的。

TARGET_DIR :=bin
SRC += $(wildcard *.cpp )
EXE += $(patsubst %.cpp, %, $(SRC) )
COMPILE=g++
CFLAGS= -Wall -g -O0
all : $(EXE)
.PHONEY:all

% : %.cpp
@if [ ! -d bin ]; then mkdir bin; fi
$(COMPILE) $(CFLAGS) $< -o $(TARGET_DIR)/$@

clean:
rm -rf *.o


稍微解释下:上面EXE是将src下所有源码文件去掉.cpp后的文件名,这个文件名就是之后的可执行文件名。比如你的文件夹下有一个test.cpp,这EXE就是test。.PHONEY:all是说明可以生成多个目标文件。

@if [ ! -d bin ]; then mkdir bin; fi是判断文件夹下是否存在bin目录,没有就创建。

底下[b]$(COMPILE) $(CFLAGS) $< -o $(TARGET_DIR)/$@,意思是编译,编译完之后直接放在bin目录下。$<是第一个依赖文件的意思。$@是目标文件的意思。[/b]





%:%.cpp是将所有的.cpp文件直接生成目标文件,没有中间文件的。大家可以按照自己的需求进行修改。

clean大家都清楚吧。

在我的机器上,大致编译显示如下:



作者:Alex

出处:http://blog.csdn.net/hellotime

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: