当前位置:  技术问答>linux和unix

makefile 子文件夹下的问题

    来源: 互联网  发布时间:2017-04-09

    本文导语:  主文件夹main,子文件夹font,image 主文件夹下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 +...

主文件夹main,子文件夹font,image
主文件夹下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,谢谢您的回复。

|

#global directory defined
TOPDIR  = $(shell pwd)
SRCDIR  = $(TOPDIR)/src
LIBDIR  = $(TOPDIR)/lib
OBJECTDIR  = $(TOPDIR)/build
INCLUDEDIR = $(TOPDIR)/include


#cross compile tools defined
#CROSS_COMPILE ?=
AS      = $(CROSS_COMPILE)as
LD      = $(CROSS_COMPILE)ld
CC      = $(CROSS_COMPILE)gcc
CPP     = $(CC) -E
AR      = $(CROSS_COMPILE)ar
NM      = $(CROSS_COMPILE)nm
STRIP   = $(CROSS_COMPILE)strip
RANLIB  = $(CROSS_COMPILE)ranlib


#local host tools defined
CP    := cp
RM    := rm
MKDIR := mkdir
SED   := sed
FIND  := find
MKDIR := mkdir
XARGS := xargs


VPATH       := $(shell ls -AxR $(SRCDIR)| grep ":"| grep -v ".svn" | grep -v ".git"| tr -d ':')
SOURCEDIRS  := $(VPATH)

#search source file in the current dir
SOURCES    := $(foreach subdir,$(SOURCEDIRS),$(wildcard $(subdir)/*.c))
SRCOBJS    := $(patsubst %.c,%.o,$(SOURCES))
BUILDOBJS  := $(subst $(SRCDIR),$(OBJECTDIR),$(SRCOBJS))

$(OBJECTDIR)/%.o: $(SRCDIR)/%.c
        @[ -d $(dir $(subst $(SRCDIR),$(OBJECTDIR),$@)) ] | $(MKDIR) -p $(dir $(subst $(SRCDIR),$(OBJECTDIR),$@))
        $(CC) $(CPPFLAGS) $(CFLAGS) -o $(subst $(SRCDIR),$(OBJECTDIR),$@) -c $

    
 
 

您可能感兴趣的文章:

  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • makefile中如何把一个子文件夹中的文件一起编译了?
  • 为什么在同一个文件夹下面新建一个程序文件,然后修改Makefile,就出错?
  • 关于linux0.11根文件夹下MakeFile的疑问?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • makefile如何调用文件目录下的makefile
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • 关于makefile的问题。一个makefile如何生成两个可执行文件。
  • makefile文件与批处理文件
  • 关于makefile文件的问题
  • Makefile文件,是不是很重要?
  • 自动生成makefile的问题, C文件成功,但CPP文件失败,请指点.谢谢.
  • 急~~~~~ 如何用Makefile.in文件
  • 请教,Makefile目标文件要通配目录下所有C文件,如何写?
  • 高手请进:linux下使用.o文件,makefile文件的问题
  • 如何在makefile文件中组织文件的层次关系??
  • 第一次写make文件,报makefile:2: *** missing separator. Stop.错,make文件只有两行
  • cpp文件如何自动生成Makefile文件
  • Linux Makefile探讨,产生的.d文件是.c文件的依赖?
  • 如何修改libnids的makefile文件,让编译生成的库文件放在本地路径
  • 自己编写一个程序编译进内核,要修改makefile文件吗?
  • MAKEFILE求助,LINUX下如何将多个.a文件合并为一个.a文件或者.lib文件
  • 关于Makefile自动生成头文件依赖的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • 请教根据Makefile.am自动生成Makefile的问题
  • 怎麼樣使Makefile.in生成Makefile?
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)
  • make -f makefile 时提示 Make: Must be a separator on rules line 5. Stop. 为什么,makefile 如下
  • 请问如何写动态的Makefile,或是有什么好的Makefile写法?麻烦分享一下,谢谢
  • Makefile :scripts/Makefile.build:49: *** CFLAGS was changed in "/opt/zaptel-1.4.
  • makefile include的问题
  • linux中makefile大小写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,