makefile实例(1)-helloworld
简单makefile实例
1,源文件:
main.cpp
#include <stdio.h> int main()
{
printf("Hello World\n");
return 0;
}
2,编写makefile
若使用g++命令编译链接程序,可以:
g++ -o hello main.cpp
或
g++ [-o main.o] -c main.cpp
g++ -o hello main.o
若使用make命令,则可以这么编写makefile文件(两种写法分别对应了上面说的两条g++命令):
提示:
2.1,makefile的基本格式为“目标:依赖 命令”
一个 makefile 主要含有一系列的规则,如下:
A: B
(tab)<command>
(tab)<command>
重要: 每个命令行前都必须有tab符号
举例来说,一种简单写法如下:
main : main.c
gcc main.c –o main
在终端执行make命令就可以得到main文件了
2.2 执行过程
通常make命令会逐行解释makefile文件,然后执行第一个”目标格式行”及其后的”目标命令行“。直到碰到下一个”目标格式行”为止。
注意这里指的是下一个”目标格式行“,而不是文件末尾。
所以我们把生成最后的可执行文件的makefile代码放在第一行时,只需要键入make就可以。
而有些makefile文件未将生成最后的可执行文件的代码放在第一行,所以如果make的话,就只能执行到第一个目标格式行的code.
另外,我们使用伪目标让makefile执行不同的操作,如定制Debug和Release版本,清空中间生成文件,安装软件包等等。
2.3, 这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,其冒号后面为空,make就不会找文件的依赖性,也就不会自动执行其后所定义的命令。
要执行其后的命令,就需要在make 命令后显式指出这个名字。这样我们就可以定义一些与编译无关的命令:打包程序,清理程序等外围操作等。
用".PHONY {目标名}"定义一个伪目标, 用"make {目标名}"执行该伪目标
.PHONY : clean
clean :
@rm -f main *.o
@echo 'clean'
此时执行make命令,终端会显示系统执行的每条命令,如果你不想系统显示它执行的命令,在每条命令的前面加上“@”即可。
hello : main.cpp
g++ main.cpp -o hello
clean:
rm hello main.o -rf
或
hello: main.o
g++ -o hello main.o
main.o : main.cpp
g++ -c main.cpp clean:
rm hello main.o -rf
3,执行make,进行编译链接,
[root@localhost 0-helloworld]#make
g++ -o hello main.o
[root@localhost 0-helloworld]#ll
总用量 20
-rwxr-xr-x 1 root root 6908 11月 26 22:59 hello
-rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 1472 11月 26 22:35 main.o
-rw-r--r-- 1 root root 144 11月 26 22:51 makefile
4,执行程序
[root@localhost 0-helloworld]#./hello
Hello World
5,清理程序
[root@localhost 0-helloworld]#make clean
rm hello main.o -rf
[root@localhost 0-helloworld]#ll
总用量 8
-rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 151 11月 26 23:02 makefile
[root@localhost 0-helloworld]#
makefile实例(1)-helloworld的更多相关文章
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis gcc和whereis make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...
- Ubuntu下比较通用的makefile实例
本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...
- makefile实例(3)-多个文件实例优化
我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一 ...
- makefile实例(2)-多个文件实例
1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...
- Makefile 实例实践
本文为原创文章,转帖需指明该文链接 目录结构如下: comm/inc/apue.h comm/errorhandler.c atexit.c Makefile 文件内容如下: apue.h #if ...
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转
http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4% ...
- makefile实例
#.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...
- Makefile 实例
CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...
- makefile简单helloworld
最近要在unix系统上开发c++应用程序,但默认情况下unix编译c++程序需要使用makefile.其实makefile语法还是比较简单,看上去有点像ant.废话不说了,直接上helloworld. ...
随机推荐
- switch中的default的位置
[转载]http://hi.baidu.com/dannie007zxl/item/5d0c3185577df719c3162724 有的时候,我们对身旁自认为熟悉的东西,却发现很难去给出准确的回答. ...
- iOS在线音乐播放SZKAVPlayer(基于AVPlayer的封装)
由于最近闲着没事,想找有关在线音乐播放的demo学习一下,在gitHub跟code4APP上面查找了很多帖子,结果很多在线音乐都是基于AudioStream实现的,我感觉用起来不太方便.后来突然发现, ...
- Android TextView 文字居中
有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity( ...
- CentOS防火墙操作实例(启动、停止、开、闭端口)
注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status<回车> 停止防火墙: [root@localh ...
- SPOJ 227 Ordering the Soldiers 线段树 / 树状数组
题意:设原数组为a[i],pos[i]代表第 i 个位置之前有多少个数比a[i]大,求原数组a[i]. 这个题意是看了别人的题解才明白,我自己没读出来…… 方法:假设我们从左往右放,因为后面的数还有可 ...
- Data Base MySQL的常用命令
MySQL的常用命令 一.下载地址: http://www.mysql.com 二.安装注意: root默认密码:123456 三.常用命令: 1.创建用户并授权: 创建用户,只能本地访问:cr ...
- git pull使用【转】
转自:http://www.yiibai.com/git/git_pull.html git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并.它的完整格式稍稍有点复杂. $ ...
- JavaScript —— 局部变量和全局变量
JS的全局变量有3种声明方式: 1.Function 外 var v_myVar; 2.Function 内 v_myVar; 3.window.v_myVar window.v_myVar 全局变量 ...
- [原]poj-1611-The Suspects(水并查集)
题目链接:http://poj.org/problem?id=1611 题意:输入n个人,m个组.初始化0为疑似病例.输入m个小组,每组中只要有一个疑似病例,整组人都是疑似病例.相同的成员可以在不同的 ...
- ios用户控件
22:48:452015-03-16说道用控件,很地东方都在用.用好了,可以加快开发进度,提高可维护性,程序的稳定,健壮性,用不好,也可以提高经验值啊,下次就好了,算是学习成本吧. 不同语言,不同项目 ...