Makefile 文件格式

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

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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值