Makefile包含 目标文件、依赖文件、可运行命令三部分。

每部分的基本格式例如以下:

test: prog.o  code.o

gcc  -o  test   prog.o   code.o

当中,第一行的test是目标文件。 prog.o、code.o是依赖文件

第二行的gcc -o test prog.o code.o是可运行命令

整个Makefile文件都是这样的格式。

下面是一些example:

-----------------------Makefile example 1----------------------------------

#this line is the comment for the Makefile

test: prog.o code.o

gcc   prog.o  code.o  -o test

prog.o: prog.c  prog.h  code.h

gcc  -c  prog.c  -o  prog.o

code.o: code.c  code.h

gcc  -c  code.c  -o  code.o

clean:

rm  -f  *.o

----------------------------------------------------------------------------------------------

-------------------------------example 2(包括变量)---------------------------------

#this line is the Makefile comment

OBJS = prog.o  code.o

CC = gcc

CFLAGS = -Wall -g -O

test: ${OBJS}

${CC}  ${CFLAGS}  ${OBJS}  -o test

prog.o: prog.c  prog.h  code.h

${CC}  ${CFLAGS}  -c prog.c  -o prog.o

code.o: code.c  code.h

${CC}   ${CFLAGS}  -c code.c  -o code.o

clean:

rm  -f  *.o

------------------------------------------------------------------------------------------------


-------------------------------example 3(使用Makefile的隐含规则)---------------------------------

1,假设没有对应的编译命令,则使用隐含规则,全部的 ".c文件" 编译成与它名称同样的 ".o文件"。

2, 使用Makefile的自己主动变量。

#this line is the Makefile comment

OBJS = prog.o  code.o

CC = gcc

test: ${OBJS}

${CC}   -o  $@   $^

prog.o: prog.c  prog.h  code.h             #no exec command,and will generate the prog.o

code.o: code.c  code.h                        #no exec command,and will generate the code.o

clean:

rm  -f  *.o

------------------------------------------------------------------------------------------------

-----------------------------------------------------下面为我測试过的实例文件内容 :-----------------------------------------------------

========================== Makefile ===============

#this line is the comment

CC = gcc

OBJS = my_str.o

CFLAGS = -Wall -g -O





program: my_main.c ${OBJS}

               ${CC} ${CFLAGS} $^ -o $@ 

my_str.o: my_str.c my_str.h

               ${CC} ${CFLAGS} -c my_str.c -o my_str.o





clean:

               rm -f *.o

=======================================================================

==========================my_main.c=======================

#include <unistd.h>

#include <stdlib.h>

#include "my_str.h"



int 

main(int argc, const char **argv)

{

if(my_cmp(argv[1], argv[2]) == 0)

write(1, "Equal !\n", sizeof("Equal !\n"));

else

write(1, "Not Equal !\n", sizeof("Not Equal !\n"));





exit(0);

}

===============================================================

========================my_str.c=============================

#include "my_str.h"





int 

my_cmp(const char *str1, const char *str2)

{

if(!str1 || !str2)

return -1;

while(*str1 && *str2 && *str1 == *str2)

str1++, str2++;

return *str1 - *str2;

}

==================================================================

===================my_str.h============================================

#ifndef _MY_STR_H

#define _MY_STR_H





int my_cmp(const char *str1, const char *str2);





#endif

==================================================================

Makefile 文件格式的更多相关文章

  1. Makefile 文件格式;makefile伪目标

    Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o  code.o gcc  -o  test   prog.o   code.o 当中 ...

  2. C++学习笔记24:makefile文件

    makefile make命令:负责c/c++程序编译与链接 make根据指定命令进行建构 建构规则文件:GNUmakefile , makefile,Makefile makefile 文件格式 m ...

  3. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...

  4. Shell脚本——make命令和Makefile文件【转】

    https://blog.csdn.net/twc829/article/details/72729799 make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文 ...

  5. 使用make

    5.11 库的使用 代码的复用是计算机程序设计语言中的一个重要的概念.可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码. 在Linux操作系统下,最后连接生成可执行 ...

  6. 别人的Linux私房菜(22)软件安装:源代码与Tarball

    执行make,会在当前目录查找makefile文本文件(记录了源代码如何编译的详细信息). 内核相关的函数信息放置在/usr/lib./usr/lib64里. 在Tarball(一般为xxx.tar. ...

  7. linux-2.6.22.6内核启动分析之配置

    配置过程最终结果是生成.config文件,我们想要对配置的目的有很清楚的了解,必须先对.config文件进行分析.通过cd命令切换到linux-2.6.22.6内核目录,输入vi .config 可以 ...

  8. 第22章 软件安装:源码与Tarball

    开放源码的软件安装与升级简介 什么是开放源码.编译程序与可执行文件 开放源码:程序代码,写给人类看的程序语言 编译程序:将源码编译成机器能看得懂的语言 可执行文件:经过编译变成二进制程序后机器看得懂可 ...

  9. 教会你如何编写makefile文件

    最近一直在学习makefile是如何编写的.当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷.linux有一个自带的make命令,它让你的 ...

随机推荐

  1. Android SDK Manager代理设置

    1.SDK Manager中打开 Tools—>Manage Add-on Sites…—>User Defined Sites 2.New …输入: http://android-mir ...

  2. javaEE之-------统计站点刷新量

    每一个站点都有自己的统计訪问量,可是少不了server会出现意外情况,(如断电..) 所以就须要我们在站点挂机的前段时间将这个数据存起来. 我们就须要用到站点最大的容器,application,我们採 ...

  3. [问题]HDOJ1032 The 3n + 1 problem

    http://acm.hdu.edu.cn/showproblem.php? pid=1032 这题能够用暴力求解.求出在[ni,nj]之间全部数字产生的最大值. 通过观察能够知道,当nk靠近nj的时 ...

  4. 推荐一款优雅的jquery手风琴特效

    推荐一款基于 jQuery和 CSS3实现的手风琴效果. 查看demo演示

  5. 巧用FPGA中资源

    随着FPGA的广泛应用,所含的资源也越来越丰富,从基本的逻辑单元.DSP资源和RAM块,甚至CPU硬核都能集成在一块芯片中.在做FPGA设计时,如果针对FPGA中资源进行HDL代码编写,对设计的资源利 ...

  6. thinkphp路由的作用

    thinkphp路由的作用 问题 请问一下什么是thinkPHP路由,路由有什么作用?谢谢 解答 网络访问地址从来都是映射访问的,最初是这样,主机名(电脑名称)=>ip地址(如局域网192.16 ...

  7. TYVJ 1935 拆点网络流

    思路: 就是一个多重匹配 把每个防御塔拆成 拆成第j次 发射的导弹 跑个网络流 //By SiriusRen #include <cmath> #include <queue> ...

  8. 初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏

    PHP echo  print 都能输出文本 date(format,timestamp)可以格式化时间戳 mktime()可以返回指定日期的时间戳 include 'filename'或者 requ ...

  9. Oracle修改表空间自增长

    下面列出详细过程: 1.通过sql plus 命令登录数据库. 在命令行下输入sqlplus “登录用户名/口令 as 登录类型”就可以登录,系统内建的用户名常用的是sys,密码是在安装oracle过 ...

  10. Cisco交换机IOS配置介绍

    一.模式• 用户模式(>):• 特权模式(#):• 全局配置模式(config#):• 接口配置模式(config-if#):• 线路模式(#config-line): 二.基本IOS命令结构• ...