编译环境搭建:Makefile
前言
长久以来,笔者一直想用一种管理工具,将所编写的测试程序、算法代码以及工程代码统一管理起来。因为有些是用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目录,没有就创建。底下$(COMPILE) $(CFLAGS) $< -o $(TARGET_DIR)/$@,意思是编译,编译完之后直接放在bin目录下。$<是第一个依赖文件的意思。$@是目标文件的意思。
%:%.cpp是将所有的.cpp文件直接生成目标文件,没有中间文件的。大家可以按照自己的需求进行修改。 clean大家都清楚吧。

作者
出处:http://www.cnblogs.com/gina
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
编译环境搭建:Makefile的更多相关文章
- u-boot 移植(一)编译环境搭建
u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...
- ubuntu12.04下安卓编译环境搭建总结
前言: 因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- Emscripten编译环境搭建--将C和C++编译成JS
Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- IoT设备程序开发及编译环境搭建初体验
引言 Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮.目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境.本文在对Mirai的源码研究的 ...
- Tiny4412 开发板 编译环境搭建【转】
本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- linux下arm平台Qt编译环境搭建与解析
一.概述: 我们知道QTcreator.这仅仅是个IDE,他包含了一个编译器--qmake.这两者的关系与codeblocks和g++的关系一样,首先要明确这些. 而我们在linu ...
- 手把手教你cuda5.5与VS2010的编译环境搭建
参考:http://www.cnblogs.com/xing901022/archive/2013/08/09/3248469.html 目前版本的cuda是很方便的,它的一个安装里面包括了Toolk ...
随机推荐
- day6-python基础
- Qt 模型/视图/委托
模型.视图.委托 模型/视图架构基于MVC设计模式发展而来.MVC中,模型(Model)用来表示数据:视图(View)是界面,用来显示数据:控制(Controller)定义界面对用户输入的反应方式. ...
- 【Asp.net入门11】第一个ASP.NET 应用程序-创建摘要视图
目前已经完成了应用程序的基本结构单元,受邀者也能够做出回复.这一节将添加一个支持组件,以显示收到的回复摘要,以便用户的朋友了解谁会参加晚会,并做出适当安排.在Solution Explorer中右键单 ...
- Django admin 忘记密码
from django.contrib.auth.models import User user = User.objects.get(username="admin") user ...
- [Web] Web请求过程之一:HTTP
请求过程: 1.用户在浏览器输入 www.sdjtu.edu.cn 这个URL. 2.浏览器请求 DNS 服务器将这个 URL 解析成对应的 IP 地址. 3.浏览器向 IP 地址对应的这个服务器发起 ...
- Shell记录-Shell脚本基础(六)
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行. 1.命令格式 watch[参数][命令] ...
- bzoj千题计划166:bzoj2179: FFT快速傅立叶
http://www.lydsy.com/JudgeOnline/problem.php?id=2179 FFT做高精乘 #include<cmath> #include<cstdi ...
- bzoj 3309 反演
$n=p_1^{a_1}p_2^{a_2}…p_k^{a_k},p_i$为素数,定义$f(n)=max(a_1,a_2…,a_k)$. 给定a,b<=1e7求$\sum\limits_{i=1} ...
- 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探
一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...
- Matlab debug
输入彩色,imwrite保存黑白图片,imwrite的维度错误. 程序如下,正常图像,少了一个维度imwrite,把图片展开,是一个二维的灰色图像(R=G=B),.如果限定了第二维,也是一个灰色图像. ...