makefile子目录中新生成的O文件为何找不到?

搬板砖 2014-08-19 09:02:13
根目录下有二个以上文件夹,每个文件夹下都有独立的makefile文件能够生成.o文件,在根目录下的makefile需要调用子目录下的makefile,然后将子目录下生成的所有.o合成一个大的.o文件。
目录:
Makefile
目录A
1.c
2.c
makefile
目录B
3.c
4.c
makefile


子目录下的makefile就不说了,根目录下makefile:

MODULES := 目录A 目录B
all:
for module in $(MODULES);do if make -w -C $$module all; then echo "$$module build success";else echo "$$module build error";exit 1; break;fi; done

#在执行上面的动作首次生成子目录的.o文件时在这里打印是空的,而在子目录己经生成.o后,再次执行该makefile
#这里有打印,为什么呢?
echo $(shell find $(MODULES) -name '*.o')

##在执行上面的动作首次生成子目录的.o文件时有打印
find $(MODULES) -name '*.o'

#用wildcard在首次生成子目录的.o文件时,这里打印也是空的
echo $(wildcard */*.o)

#由于首次生成子目录的.o文件时find为空,因此这里报错。 这里应该怎么写?
$(LD) -r -o lib根.o $(shell find $(MODULES) -name '*.o')


...全文
519 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬板砖 2015-01-19
  • 打赏
  • 举报
回复
本来想用MODULES列出obj,看来不行,只能再手动用SOURCE把obj列出来

LIBS_DIR ?= $(ROOTDIR)/libs

MODULES := 目录A 目录B
SOURCE := $(wildcard 目录A/*.c) $(wildcard 目录A/*.c)
OBJS := $(patsubst %.c,%.o,$(SOURCE))

all:
	for module in $(MODULES);do if make -w -C $$module all;	then echo "$$module build success";else echo "$$module build error";exit 1; break;fi; done

	$(LD) -r -o $(LIBS_DIR)/$(TARGET_NAME) $(OBJS)
	
clean:  
	for module in $(MODULES); do if make -w -C $$module clean; then echo "$$module clean success"; else echo "$$module clean error"; break; fi; done
	-rm -f ./*.o
	-rm -f $(LIBS_DIR)/$(TARGET_NAME)
code_Rocker 2014-08-29
  • 打赏
  • 举报
回复
你最后的rm -F ‘*.o’是不是自动执行了,本来是make clean才行的,你是不是写成自动运行的了

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧