自己写Makefile编译当前文件夹下子文件夹中的文件
时间:2014-03-07 21:03 来源:linux.it.net.cn 作者:IT网
场景说明:
当前文件夹下有Makefile 子文件夹test1 test2
test1文件夹下有:Makefile main1.c
test2文件夹下有:Makefile main2.c
我们的目标是编译出main1 main2 2个可执行文件
先写main1.c测试代码
int main(void)
{
}
main2.c和main1.c一样
下边写父文件夹中的Makefile
SUBDIRS = tes1 test2
.PHONY:default all clean $(SUBDIRS)
default:all
all clean:
$(MAKE) $(SUBDIRS) TARGET=$@
$(SUBDIRS):
$(MAKE) -C $@ $(TARGET) //这一步是跳转到子目录并执行子目录中的Makefile
子文件夹下的Makefile
CC = gcc
BIN = main1 //设置编译输出的可执行文件
SRCS = $(wildcard *.c)//获得当前目录下的所有.c文件
OBJS = $(SRCS:%.c:%.o)//把后缀为.c文件重命名为.o文件
.PHONY:all clean print //all clean承接父文件Makefile中的TARGET
all:print $(BIN)
print:
echo "------- test1 dir make begin ----------"
$(BIN):$(OBJS)
%.o:%.c //模式匹配
clean:
test2文件夹下的Makefile和上边的类似
下边就可以在父文件夹中执行make就可以编译test1 和 test2文件夹下的文件了
(责任编辑:IT)
场景说明: 当前文件夹下有Makefile 子文件夹test1 test2 test1文件夹下有:Makefile main1.c test2文件夹下有:Makefile main2.c 我们的目标是编译出main1 main2 2个可执行文件 先写main1.c测试代码 int main(void) { } main2.c和main1.c一样 下边写父文件夹中的Makefile SUBDIRS = tes1 test2 .PHONY:default all clean $(SUBDIRS) default:all all clean: $(MAKE) $(SUBDIRS) TARGET=$@ $(SUBDIRS): $(MAKE) -C $@ $(TARGET) //这一步是跳转到子目录并执行子目录中的Makefile 子文件夹下的Makefile CC = gcc BIN = main1 //设置编译输出的可执行文件 SRCS = $(wildcard *.c)//获得当前目录下的所有.c文件 OBJS = $(SRCS:%.c:%.o)//把后缀为.c文件重命名为.o文件 .PHONY:all clean print //all clean承接父文件Makefile中的TARGET all:print $(BIN) print: echo "------- test1 dir make begin ----------" $(BIN):$(OBJS) %.o:%.c //模式匹配 clean: test2文件夹下的Makefile和上边的类似 下边就可以在父文件夹中执行make就可以编译test1 和 test2文件夹下的文件了 (责任编辑:IT) |