简单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的更多相关文章

  1. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

    一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...

  2. Ubuntu下比较通用的makefile实例

    本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html  笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...

  3. makefile实例(3)-多个文件实例优化

    我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一 ...

  4. makefile实例(2)-多个文件实例

    1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...

  5. Makefile 实例实践

    本文为原创文章,转帖需指明该文链接 目录结构如下: comm/inc/apue.h comm/errorhandler.c atexit.c Makefile 文件内容如下: apue.h   #if ...

  6. 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% ...

  7. makefile实例

    #.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...

  8. Makefile 实例

    CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...

  9. makefile简单helloworld

    最近要在unix系统上开发c++应用程序,但默认情况下unix编译c++程序需要使用makefile.其实makefile语法还是比较简单,看上去有点像ant.废话不说了,直接上helloworld. ...

随机推荐

  1. lintcode :同构字符串

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  2. key-value数据库

    http://blog.csdn.net/byane/article/details/6928519 传统的文件系统中,需要维护目录的层次结构,使用dentry,inode,directory等复杂结 ...

  3. ext3grep

  4. JavaWeb笔记——三大组件之监听器

    1 JavaWeb监听器概述 在JavaWeb被监听的事件源为:ServletContext.HttpSession.ServletRequest,即三大域对象. l  监听域对象“创建”与“销毁”的 ...

  5. css属性

    文本: color 颜色 line-height 行高 direction 文本方向 letter-spacing 字符间距 text-align 对齐方式 text-decoration 文本修饰 ...

  6. Data Flow ->> DQS Cleansing

    Data Quality Services(DQS)是SQL Server 2012引入的一大特性.这个服务的任务是为了实现客户端数据标准化和清理错误数据的.比如客户端数据容易因为用户输出诸如像城市名 ...

  7. jsp页面变量作用域问题

    想实现一个注销的功能,在页面上有个注销按钮,我想一点它就注销,用了js给按钮加了onclick代码,如下 <%      session = request.getSession(true); ...

  8. java eclise的配置

    java eclise的配置 http://jingyan.baidu.com/album/870c6fc33e62bcb03fe4be90.html?picindex=24

  9. MapReduce读取hdfs上文件,建立词频的倒排索引到Hbase

    Hdfs上的数据文件为T0,T1,T2(无后缀): T0: What has come into being in him was life, and the life was the light o ...

  10. poj-3616 Milking Time (区间dp)

    http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...