简单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. LR_问题_平均响应时间解释,summary与analysis不一致

    Summary Report中的时间说明 Summary是按整个场景的时间来做平均的,最大最小值,也是从整个场景中取出来的. (1)       平均响应时间:事物全部响应时间做平均计算 (2)    ...

  2. 看完这些,你就算得上既了解围棋又了解alphago了

    首先,我们要祝贺小李下出第78手的“神之一手”,这一手堪称前无古人后无来者,尤其是结合了阿尔法狗自暴自弃的表现.小李说过他的失败并不是人类的失败,同样,小李的胜利也只是属于他一人的胜利. 然而人类在围 ...

  3. iOS开发多线程--(NSOperation/Queue)

    iOS实现多线程的方式有三种,分别是NSThread.NSOperation.GCD. 关于GCD,请阅读GCD深入浅出学习 简介 NSOperation封装了需要执行的操作和执行操作所需的数据,提供 ...

  4. 对所有CPU寄存器的简述(16位CPU14个,32位CPU16个)

    32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES.CS.SS.DS.FS和GS)1 ...

  5. 【解惑】Java动态绑定机制的内幕

    在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto ...

  6. 管理IPv6网络连接

    以下操作建立在Linux功能-管理IPv4网络连接之上,请先完成该部分操作后进行以下测试. 1. 修改 net1,配置 IPv6 地址为 2001:X/64 ,网关为 2001:254 [root@d ...

  7. Model的验证

    ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public v ...

  8. CDC ->> 在某个SQL Server中开启CDC功能

    USE AdventureWorks;GO--开启某个数据库的CDC功能EXEC sys.sp_cdc_enable_db;GO--is_cdc_enabled栏位为1代表开启CDC功能了SELECT ...

  9. 最短路径BellmanFord , Dijsktra

    最短路径算法也是常用的图算法,在网上看到了一份c的代码,写的很清楚,今天有空给写成java的了,就当练手了.另,算法导论362页详细介绍了Bellman-Ford算法,本来打算再写个Dijsktra算 ...

  10. eclipse 中使用tomcat

    最近写了个商品搜索模块,要做成tomcat服务,以前只关注算法,从来没有使用过tomcat,这次上网上查了些资料还搞定(小公司真是锻炼人啊,以前我从来不考虑这些服务问题). 1.tomcat 环境的搭 ...