我有一個子目錄obj bin src包含在其中的drectiry子目錄測試。我有3個生成文件在一個在src一個obj和一個在子測試中。我想使用遞歸make,但是我有一個錯誤。 目錄結構:Makefile包含來自其他目錄的頭文件
subdir-test
- Makefile1
- src
- all.c files and Makefile2
- obj
- all.o files and Makefile3
- include
- functions.h
- bin
,這裏是化妝文件: Makefile1:
SUBDIRS = src obj
subdirs :
for dir in $(SUBDIRS);\
do \
$(MAKE) -C $$dir ;\
done
.PHONY : clean
clean :
rm -rf bin/* obj/*
Makefile2:
inc = -I ../include/
all : main.o factorial.o
main.o : main.cpp functions.h
cc -c $< -I $(inc) -o ../obj/[email protected] -lstdc++
factorial.o : factorial.cpp functions.h
cc -c $< -I $(inc) -o ../obj/[email protected] -lstdc++
Makefile3:
run : main.o factorial.o
cc $^ -o ../bin/[email protected]
在呼籲從分測試創建目錄-f Makefile1我得到以下錯誤:
for dir in src obj;\
do \
make -C $dir ;\
done
make[1]: Entering directory `/home/betatest/Public/subdir-test/src'
make[1]: *** No rule to make target `functions.h', needed by `main.o'. Stop.
make[1]: Leaving directory `/home/betatest/Public/subdir-test/src'
make[1]: Entering directory `/home/betatest/Public/subdir-test/obj'
make[1]: *** No rule to make target `main.o', needed by `run'. Stop.
make[1]: Leaving directory `/home/betatest/Public/subdir-test/obj'
make: *** [subdirs] Error 2
我有其他的問題,因爲我想要寫循環如下:
for dir in $(SUBDIRS)
do
$(MAKE) -C $$dir
done
有我我也在循環中出錯。我哪裏錯了。
如果你的make文件沒有命名爲'makefile'或者'Makefile'(或者可能還有其他一些混合大小寫變體,取決於你的'make'版本),那麼你還必須告訴'make'要使用哪個文件 - 比如'make -C src -f Makefile2' ... – twalberg 2015-01-15 16:22:01
這不是那個問題,但問題是頭文件在包含文件夾中,它不包含在src文件夾中的Makefile2,所以我認爲我在「inc」變量用法。請建議解決方案如何包含包含文件夾中的頭文件。 – 2015-01-15 17:23:28