实例讲解Linux下的makefile

1、程序代码结构如下

makefile/
|-- Makefile
|-- haha.c
`-- hehe.c

  1.1、需要被编译的源代码如下

$ cat haha.c
#include "stdio.h"

int main()
{
    printf("ha ! ha !\n");

    return 0;
}
$ cat hehe.c
#include "stdio.h"

int main()
{
    printf("he ~ he ~\n");

    return 0;
}

  1.2、makefile的脚本如下

$ cat Makefile
.PHONY : dummy

CFLAGS    =
LDFLAGS    = 

ALL_FILES    = hehe haha

all : $(ALL_FILES)

hehe : hehe.o
    gcc -o hehe hehe.o

hehe.o : hehe.c
    gcc -c hehe.c -o [email protected]

haha : haha.o
    gcc -o haha haha.o

haha.o : haha.c
    gcc -c haha.c -o haha.o

clean : dummy
    rm -rf *.o
    rm -rf $(ALL_FILES)

  1.3、执行make命令后的编译结果

$ make
gcc -c hehe.c -o hehe.o
gcc -o hehe hehe.o
gcc -c haha.c -o haha.o
gcc -o haha haha.o
-rwxrwxr-x 1 normal normal 4940 12-11 16:08 haha
-rw-rw-r-- 1 normal normal   72 12-11 16:03 haha.c
-rw-rw-r-- 1 normal normal  872 12-11 16:08 haha.o
-rwxrwxr-x 1 normal normal 4940 12-11 16:08 hehe
-rw-rw-r-- 1 normal normal   72 12-11 16:03 hehe.c
-rw-rw-r-- 1 normal normal  872 12-11 16:08 hehe.o
-rw-rw-r-- 1 normal normal  279 12-11 16:04 Makefil

这样我们需要的程序就编译出来了。文件结构如下

makefile/
|-- Makefile
|-- haha
|-- haha.c
|-- haha.o
|-- hehe
|-- hehe.c
`-- hehe.o

多出来了4个文件,haha、haha.o、hehe、hehe.o

  1.4、执行结果

$ ./haha
ha ! ha !
$ ./hehe
he ~ he ~

  1.5 执行命令make clean,结果如下

$ make clean
rm -rf *.o
rm -rf hehe haha

多出来的文件都被删除了,接下来对makefile的脚本文件进行一下讲解。

2、下面是对makefile文件的讲解

  2.1、在make命令执行后,会在当前目录下搜索makefile、Makefile。如果当前目录没有这个两个文件的话就会报错:找不到makefile

$ make
make: *** 没有指明目标并且找不到 makefile。 停止。

  2.2、现在把Makefile改名,用参数-f 来指定要加载的脚本文件也是可以顺利编译的。

$ mv Makefile realmake
$ make -f realmake
gcc -c hehe.c -o hehe.o
gcc -o hehe hehe.o
gcc -c haha.c -o haha.o
gcc -o haha haha.o

  2.3、

时间: 2024-10-10 12:06:52

实例讲解Linux下的makefile的相关文章

实例讲解Nginx下的rewrite规则 来源:Linux社区

一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行三.rewrite指令的最后一项参数为flag标记,flag标记有:1.last    相当于apache里面的[L]标记,表示rewrite.2.break本条规则匹配完成后,终止匹配

实例讲解Linux系统中硬链接与软链接的创建

导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说起,下面就以实例讲解Linux系统中硬链接与软链接的创建,来实际看看Linux中两种链接方式的不同. 首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现

简单实例讲解linux的module模块编译步骤(转)

注:原博文讲述较为详尽细致,故转到本地--aaronGao ------------------------------------------------------------------------------------------------------------------------------------------- 本文将直接了当的带你进入linux的模块编译.当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者能够看懂.之所以要写这篇文章,主要是因为从书本上学的话,

Linux下编写 makefile 详细教程

原文地址:https://www.cnblogs.com/mfryf/p/3305778.html 还有一篇也不错:http://wiki.ubuntu.org.cn/跟我一起写Makefile:MakeFile介绍 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的mak

Linux下的makefile的妙用dd

一:起因 (0)首先我们假设读者已经熟悉了Linux 下的vim的常用操作(如,u 撤消 或  :undo   CTRL-R 重做 或  :redo): (1)Linux下面的make命令,应用与makefile文件,当我们需要对一个C / C++ 或者Java等一个工程里面的所有源文件进行编译时,每一次编译,都不想重复操作以前的命令,更不想把未更改过的源文件再次进行不必要的编译操作 -- 最佳选择makefile(PS:虽然这时,你可以选择写一个shell,但是shell需要太多的代码了,好多

Linux下的Makefile初入

在Windows下的开发环境中用集成的IDE编辑器的话,会经历编写.编译.下载/执行,而在Linux下没有这些,这就需要我们自己来进行创造. Makefile的作用就是对代码进行编译,我们在进行一个已经写好的代码进行编译的时候回执行如下指令 1 gcc a.c -o a.out 这样做的话一个文件少没问题,而一旦文件多达上百个的时候,我们不可能还要一个一个的敲,这时候就需要使用Makefile NAME := led #工程名字 OBJ := a.o b.o start.o #链接文件名 ARM

Linux下的编程实战【转】

一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台的),进程控制与进程通信编程 1.Linux进程 Linux进程在内存中包含三部分数据:代码段.堆栈段和数据段.代码段存放了程序的代码.代码段可以为机器中运行同一程序的数个 进程共享.堆栈段存放的是子程序(函数)的返回地址.子程序的参数及程序的局部变量.而数据段则存放程序的全局变量.常数以及动态数

Linux下的C编程实战

Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux.RTLinux.ARM-Linux等等. 在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源.它包含TCP/IP协议栈.它易集成GUI. 鉴于Linux操作系统在服务器和嵌入式系统领

在linux下编译openjdk7

最近刚开始看<深入理解JAVA虚拟机>这本书.第一章的实践是自己手动编译openjdk7,但书上的步骤都是基于windows的,于是在网上搜了一下linux下编译openjdk的资料: http://blog.csdn.net/kindazrael/article/details/7266314 http://guoh.org/lifelog/2011/05/compile-openjdk-by-yourself/ 这辆篇文章都说的比较详细.其实,最好的文档是openjdk源码包中的READM