您的位置:首页

Makefile 文件格式

2018-01-31 12:19 232 查看
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

==================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: