Makefile编写之我见
2012-07-29 08:50
288 查看
Makefile
=================================================================
例1.写一个简单的Makefile
源文件:hello.c hello.h
-----hello.c文件----
#include"hello.h"
int main()
{
printf("this is hello world\n");
return 0;
}
-----hello.h文件-----
#ifndef HELLO_HH_
#define HELLO_HH_
#include <stdio.h>
#endif
------Makefile文件-----
hello : hello.o
gcc hello.o -o hello
hello.o : hello.c hello.h
gcc -c hello.c -o hello.o
.PHONY : clean
clean:
rm -r *.o
编译:执行<1> make <2>./hello
==================================================================
例2.写三个.c 和一个.h
源文件:file.h main.c file1.c file2.c
------file.h文件---------
#ifndef FILE_HH_
#define FILE_HH_
#include <stdio.h>
void foo();
void goo();
#endif
-------file1.c文件-----
#include "file.h"
void foo()
{
printf("this is foo()\n");
}
------file2.c文件-------
#include "file.h"
void goo()
{
printf("this is goo()\n");
printf("this is invoking foo()");
foo();
}
-------main.c文件--------
#include "file.h"
int main()
{
foo();
goo();
return 0;
}
------Makefile文件------
app : main.o file1.o file2.o
gcc main.o file1.o file2.o -o app
main.o : main.c file.h
gcc -c main.c -o main.o
file1.o : file1.c file.h
gcc -c file1.c -o file1.o
file2.o : file2.c file.h
gcc -c file2.c -o file2.o
.PHONY : clean //创建伪目标即执行make clean 来清除 *.o 文件
clean :
rm -rf *.o
编译:执行<1> make <2>./app
==============================================================
例3.使用变量创建Makefile
修改例2的Makefile文件
------Makefile文件------
OBJS = main.o file1.o file2.o
CC = gcc
CFLAGS = -Wall -g -O2
APP =app
$(APP) : $(OBJS)
$(CC) $(OBJS) -o $(APP)
main.o : main.c file.h
$(CC) $(CFLAGS) -c main.c -o main.o
file1.o : file1.c file.h
$(CC) $(CFLAGS) -c file1.c -o file1.o
file2.o : file2.c file.h
$(CC) $(CFLAGS) -c file2.c -o file2.o
.PHONY : clean
clean :
rm -rf *.o
===============================================================
例4使用自动变量创建Makefile
只需记住三个常用变量:
<1> $@ 目标文件的完整名称 <2> $^ 所有不重复的目标依赖文件,以空格分开 <3> $< 第一个依赖文件名称
(1)修改例2的Makefile文件
-------Makefile文件--------
OBJS = main.o file1.o file2.o
CC = gcc
CFLAGS = -Wall -O -g
APP =app
$(APP) : $(OBJS)
$(CC) $^ -O $@
main.o : main.c file.h
$(CC) $(CFLAGS) -c $< -o $@
file1.o : file1.c file.h
$(CC) $(CFLAGS) -c $< -o $@
file2.o : file2.c file.h
$(CC) $(CFLAGS) -C $< -O $@
.PHONU : clean
clean :
rm -rf *.o
(2)修改例2的Makefile文件
-------Makefile文件--------
OBJS = main.o file1.o file2.o #target file
CC = gcc #compiler
LDFLAGS= # "-L link libraries "or "-I include"
CFLAGS = -Wall -g -O2 #compiler parameter
APP = app #execution file
$(APP) : $(OBJS)
$(CC) $(LDFLAGS) $^ -o $@
%.o : %.c
$(CC) -c $(CFLAGS) $^
.PHONY : clean
clean:
rm -rf $(OBJS) $(APP) *.gch
尊重作者,请转明来处:追Dream梦/article/8679107.html
=================================================================
例1.写一个简单的Makefile
源文件:hello.c hello.h
-----hello.c文件----
#include"hello.h"
int main()
{
printf("this is hello world\n");
return 0;
}
-----hello.h文件-----
#ifndef HELLO_HH_
#define HELLO_HH_
#include <stdio.h>
#endif
------Makefile文件-----
hello : hello.o
gcc hello.o -o hello
hello.o : hello.c hello.h
gcc -c hello.c -o hello.o
.PHONY : clean
clean:
rm -r *.o
编译:执行<1> make <2>./hello
==================================================================
例2.写三个.c 和一个.h
源文件:file.h main.c file1.c file2.c
------file.h文件---------
#ifndef FILE_HH_
#define FILE_HH_
#include <stdio.h>
void foo();
void goo();
#endif
-------file1.c文件-----
#include "file.h"
void foo()
{
printf("this is foo()\n");
}
------file2.c文件-------
#include "file.h"
void goo()
{
printf("this is goo()\n");
printf("this is invoking foo()");
foo();
}
-------main.c文件--------
#include "file.h"
int main()
{
foo();
goo();
return 0;
}
------Makefile文件------
app : main.o file1.o file2.o
gcc main.o file1.o file2.o -o app
main.o : main.c file.h
gcc -c main.c -o main.o
file1.o : file1.c file.h
gcc -c file1.c -o file1.o
file2.o : file2.c file.h
gcc -c file2.c -o file2.o
.PHONY : clean //创建伪目标即执行make clean 来清除 *.o 文件
clean :
rm -rf *.o
编译:执行<1> make <2>./app
==============================================================
例3.使用变量创建Makefile
修改例2的Makefile文件
------Makefile文件------
OBJS = main.o file1.o file2.o
CC = gcc
CFLAGS = -Wall -g -O2
APP =app
$(APP) : $(OBJS)
$(CC) $(OBJS) -o $(APP)
main.o : main.c file.h
$(CC) $(CFLAGS) -c main.c -o main.o
file1.o : file1.c file.h
$(CC) $(CFLAGS) -c file1.c -o file1.o
file2.o : file2.c file.h
$(CC) $(CFLAGS) -c file2.c -o file2.o
.PHONY : clean
clean :
rm -rf *.o
===============================================================
例4使用自动变量创建Makefile
只需记住三个常用变量:
<1> $@ 目标文件的完整名称 <2> $^ 所有不重复的目标依赖文件,以空格分开 <3> $< 第一个依赖文件名称
(1)修改例2的Makefile文件
-------Makefile文件--------
OBJS = main.o file1.o file2.o
CC = gcc
CFLAGS = -Wall -O -g
APP =app
$(APP) : $(OBJS)
$(CC) $^ -O $@
main.o : main.c file.h
$(CC) $(CFLAGS) -c $< -o $@
file1.o : file1.c file.h
$(CC) $(CFLAGS) -c $< -o $@
file2.o : file2.c file.h
$(CC) $(CFLAGS) -C $< -O $@
.PHONU : clean
clean :
rm -rf *.o
(2)修改例2的Makefile文件
-------Makefile文件--------
OBJS = main.o file1.o file2.o #target file
CC = gcc #compiler
LDFLAGS= # "-L link libraries "or "-I include"
CFLAGS = -Wall -g -O2 #compiler parameter
APP = app #execution file
$(APP) : $(OBJS)
$(CC) $(LDFLAGS) $^ -o $@
%.o : %.c
$(CC) -c $(CFLAGS) $^
.PHONY : clean
clean:
rm -rf $(OBJS) $(APP) *.gch
尊重作者,请转明来处:追Dream梦/article/8679107.html
相关文章推荐
- Linux 应用---make及makefile的编写
- makefile的编写(4)
- makefile简介及其简单编写示例
- makefile编写
- 编写makefile文件中需要注意的事情
- linux驱动编写(Kconfig文件和Makefile文件)
- Makefile编写----实例展示
- makefile文件编写
- 编写包含多文件的Makefile以及Makefile的嵌套实验
- Makefile编写
- 编写一个简单的makefile
- 自己编写makefile
- make的使用和Makefile的编写1
- Linux下 makefile编写 详细教程
- Linux的Makefile和Kconfig框架学习及编写规则
- ACE项目Makefile的编写
- linux+Makefile:几种常用的Makefale文件编写格式
- GCC:如何自己编写Makefile
- 编写makefile的方法
- 编写MakeFile学习笔记