Makefile包含来自其他目录的头文件
我有一个子目录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
有我我也在循环中出错。我哪里错了。
你的makefiles是这样写的,我相信使用依赖关系的相对路径可以解决你的问题。由于您正在按正确的顺序处理目录,因此可以将Makefile1保持原样。
Makefile2将成为:
inc = -I ../include/
all : main.o factorial.o
main.o : main.cpp ../include/functions.h
cc -c $< -I $(inc) -o ../obj/[email protected] -lstdc++
factorial.o : factorial.cpp ../include/functions.h
cc -c $< -I $(inc) -o ../obj/[email protected] -lstdc++
而且makefile3大概可以保持不变,因为main.o和factorial.o不OBJ /只存在,因为在makefile2错误的。
请注意,目前main.o和factorial.o将始终被编译(并且可能会使用.PHONY),因为目标实际上是../obj/main.o,类似于run - > ../bin /跑。 在这种情况下,我不认为你可以通过使用三种不同的makefile获得太多收益,但这取决于你。
谢谢@cacsar !!!!!它帮助我解决问题!!!!!!! – 2015-01-16 05:09:40
如果您点击接受答案按钮,则声望将会提高。 – cacsar 2015-01-16 21:48:20
如果你的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