全部博文(385)
分类: LINUX
2008-09-07 16:58:27
首先给出文件的目录结构如下:
|-- A
| |-- Makefile <-----1
| |-- file2
| | |-- Makefile <-----2
| | `-- file2.c
| `-- file4.c
|-- B
| |-- Makefile <-----3
| `-- file3.c
|-- Makefile <-----4
|-- file1.c
`-- inc
`-- a.h
有主目录A与B, A下有子目录file2
file1.c 文件内容:
#include
#include
void function2(void);
int init_module(void)
{
function2();
return 0;
}
void cleanup_module(void)
{
return;
}
file2.c 文件内容:
#include "a.h"
void function3(void);
void function2(void)
{
#ifndef MMAN
#error "12312312312321"
#endif
function3();
}
file3.c 文件内容:
void function4(void);
void function3(void)
{
function4();
}
file4.c 文件内容:
#include
void function4(void)
{
printk("done\n");
}
a.h 文件内容:
#ifndef A_INC
#define A_INC
#define SYMBOL 1111
#endif
以下给出两种Makefile的写法:
第一种:
标号为1 Makefile内容:
obj-y := file2/
lib-m := file2/file22.o file4.o
标号为2 Makefile内容:
obj-y := file22.o
file22-objs := file2.o
EXTRA_CFLAGS := -DMMAN -I$(src)/../../inc
标号为3 Makefile内容:
lib-m := file3.o
标号为4 Makefile内容:
ifneq ($(KERNELRELEASE),)
obj-y := A/ B/
obj-m := module.o
module-objs := file1.o A/lib.a B/lib.a
EXTRA_LDFLAGS := --start-group # solving circular references in archives
else
#KSRC = /lib/modules/$(shell uname -r)/build
KSRC = /usr/src/linux
PWD = $(shell pwd)
default:
$(MAKE) -C $(KSRC) M=$(PWD)
clean:
$(MAKE) -C $(KSRC) M=$(PWD) clean
endif
第二种:
标号为1 Makefile内容:
obj-y := file2/
obj-y += a.o
a-objs := file4.o
标号为2 Makefile内容:
obj-y := file22.o
file22-objs := file2.o
EXTRA_CFLAGS := -DMMAN -I$(src)/../../inc
标号为3 Makefile内容:
obj-y :=b.o
b-objs := file3.o
标号为4 Makefile内容:
ifneq ($(KERNELRELEASE),)
obj-y := A/ B/
obj-m := module.o
module-objs := file1.o A/built-in.o B/built-in.o
EXTRA_LDFLAGS := --start-group # solving circular references in archives
else
#KSRC = /lib/modules/$(shell uname -r)/build
KSRC = /usr/src/linux
PWD = $(shell pwd)
default:
$(MAKE) -C $(KSRC) M=$(PWD)
clean:
$(MAKE) -C $(KSRC) M=$(PWD) clean
endif