makefile 子文件夹下的问题
主文件夹main,子文件夹font,image
主文件夹下maikefile文件内容:
font文件夹makefile:
image文件夹下makefile同font文件夹下是一样的。
问题:
在main文件夹下如果有c文件改变,make可以检测出来,修改后直接make就可以;在子文件夹下修改c文件后,make就不能检测出来,因为main文件夹下只是检测子文件夹里的.o文件是否存在,存在就不会再去make,必须要make clean后才能检测子文件夹的改动。怎样修改能达到任何一个文件修改后,make能选择性编译呢?
初使用makefile,谢谢您的回复。
主文件夹下maikefile文件内容:
CROSS=arm-linux-
APPNAME=main
#font objs
FONTDIR = ./font
FONT_OBJS += $(FONTDIR)/font13_ASCII.o
FONT_OBJS += $(FONTDIR)/font13B_ASCII.o
FONT_OBJS += $(FONTDIR)/font16_ASCII.o
FONT_OBJS += $(FONTDIR)/font16B_ASCII.o
FONT_OBJS += $(FONTDIR)/font24_ASCII.o
FONT_OBJS += $(FONTDIR)/font24B_ASCII.o
FONT_OBJS += $(FONTDIR)/font32_ASCII.o
FONT_OBJS += $(FONTDIR)/font32B_ASCII.o
FONT_OBJS += $(FONTDIR)/hzk12.o
FONT_OBJS += $(FONTDIR)/hzk16.o
FONT_OBJS += $(FONTDIR)/hzk24.o
#image objs
IMAGEDIR = ./image
IMAGE_OBJS += $(IMAGEDIR)/image_analog.o
IMAGE_OBJS += $(IMAGEDIR)/image_analog_dbm.o
IMAGE_OBJS += $(IMAGEDIR)/image_analog_dbmv.o
IMAGE_OBJS += $(IMAGEDIR)/image_analog_dbuv.o
IMAGE_OBJS += $(IMAGEDIR)/image_buttons_background.o
IMAGE_OBJS += $(IMAGEDIR)/image_background.o
IMAGE_OBJS += $(IMAGEDIR)/image_battery_0.o
IMAGE_OBJS += $(IMAGEDIR)/image_battery_1.o
IMAGE_OBJS += $(IMAGEDIR)/image_battery_2.o
IMAGE_OBJS += $(IMAGEDIR)/image_battery_3.o
IMAGE_OBJS += $(IMAGEDIR)/image_battery_4.o
IMAGE_OBJS += $(IMAGEDIR)/image_time_background.o
IMAGE_OBJS += $(IMAGEDIR)/image_minispec.o
C_OBJS = lcd_tft.o bmp.o i2c.o main.o keyboard.o gpio.o $(FONT_OBJS) $(IMAGE_OBJS)
all: $(APPNAME)
$(APPNAME): $(C_OBJS)
$(CROSS)gcc -lpthread -o $(APPNAME) $(C_OBJS)
main.o:main.c lcd_tft.h bmp.h i2c.h keyboard.h $(FONTDIR)/font.h $(IMAGEDIR)/image.h
$(CROSS)gcc -c main.c
lcd_tft.o:lcd_tft.c lcd_tft.h $(FONTDIR)/font.h
$(CROSS)gcc -c lcd_tft.c
bmp.o:bmp.c bmp.h
$(CROSS)gcc -c bmp.c
i2c.o:i2c.c i2c.h
$(CROSS)gcc -c i2c.c
keyboard.o:keyboard.c i2c.h keyboard.h
$(CROSS)gcc -c keyboard.c
gpio.o:gpio.c gpio.h
$(CROSS)gcc -c gpio.c
$(FONT_OBJS):
cd $(FONTDIR) && $(MAKE)
$(IMAGE_OBJS):
cd $(IMAGEDIR) && $(MAKE)
clean:
rm -vf $(APPNAME) *.o *.*~ *~
cd $(FONTDIR) && make clean
cd $(IMAGEDIR) && make clean
font文件夹makefile:
CROSS=arm-linux-
C_OBJS = font13_ASCII.o font13B_ASCII.o font16_ASCII.o font16B_ASCII.o font24_ASCII.o font24B_ASCII.o font32_ASCII.o font32B_ASCII.o hzk12.o hzk16.o hzk24.o
.PHONY:font
font:$(C_OBJS)
font13_ASCII.o:font13_ASCII.c font.h
$(CROSS)gcc -c font13_ASCII.c
font13B_ASCII.o:font13B_ASCII.c font.h
$(CROSS)gcc -c font13B_ASCII.c
font16_ASCII.o:font16_ASCII.c font.h
$(CROSS)gcc -c font16_ASCII.c
font16B_ASCII.o:font16B_ASCII.c font.h
$(CROSS)gcc -c font16B_ASCII.c
font24_ASCII.o:font24_ASCII.c font.h
$(CROSS)gcc -c font24_ASCII.c
font24B_ASCII.o:font24B_ASCII.c font.h
$(CROSS)gcc -c font24B_ASCII.c
font32_ASCII.o:font32_ASCII.c font.h
$(CROSS)gcc -c font32_ASCII.c
font32B_ASCII.o:font32B_ASCII.c font.h
$(CROSS)gcc -c font32B_ASCII.c
hzk12.o:hzk12.c font.h
$(CROSS)gcc -c hzk12.c
hzk16.o:hzk16.c font.h
$(CROSS)gcc -c hzk16.c
hzk24.o:hzk24.c font.h
$(CROSS)gcc -c hzk24.c
.PHONY:clean
clean:
rm -vf *.o *.*~ *~
image文件夹下makefile同font文件夹下是一样的。
问题:
在main文件夹下如果有c文件改变,make可以检测出来,修改后直接make就可以;在子文件夹下修改c文件后,make就不能检测出来,因为main文件夹下只是检测子文件夹里的.o文件是否存在,存在就不会再去make,必须要make clean后才能检测子文件夹的改动。怎样修改能达到任何一个文件修改后,make能选择性编译呢?
初使用makefile,谢谢您的回复。
...全文
相关推荐
makefile分文件夹编译框架
本框架,分文件夹管理,可以让程序更具模块化,利于编写出更高效的代码
多文件夹下编写Makefile
多文件夹下编写Makefile.rar
Linux多个Makefile文件编译,多层次Makefile文件编译和多目标Makefile文件编译
make文件夹包含了两个子文件夹,a_b子文件夹实现多目标Makefile编译,projects子文件夹实现多层次Makefile文件编译。make文件夹中实现多个Makefile文件编译,即调用a_b和project2子文件夹中Makefile编译。
LINUX C++下多个Makefile编写方法
在Readme文档中有详细描述。这个小程序有3个makefile组成,一个主makefile,两个子makefile。在各个makefile中都有详细的注释,供学习使用。
Linux环境下万能Makefile
参考网上资料总结的万能makefile, 在与makefile文件同级目录创建src文件夹,将*.c、*.h文件放在src文件夹下,子文件夹随便创建,makefile会进行自动检索。非常方便实用,祥见代码~


