【发布时间】:2009-07-21 20:28:57
【问题描述】:
我正在尝试使用 makefile...主要是当源位于许多目录中时
我有以下情况...
project/src/ 包含目录 A、B、Main
目录A包含A.h和A.cpp; B包含B.cpp和B.h;并且测试包含 test.cpp
A.cpp 包括 A.h; B.cpp 包含 B.h,Main.cpp 包含 A.h、B.h
project/lib 包含 libA.a libB.a
A 和 B 的 Makefile 很好...没问题...我正在从对象和 然后将它们复制到 lib 目录中
例如。目录 A 的 makefile,和 B 类似的文件
all:test
test : A.cpp A.hh
g++ -c A.cpp -o A
ar cru libA.a A.o
cp libA.a pathto/project/lib
我有主目录的makefile
all: test
test: test.o
g++ -I.. -L../../lib test.o -o test -lA -lB
test.o : test.cpp
g++ -c test.cpp -o test.o
一切正常……我唯一想解决的是最终可执行的“测试” 依赖于来自 libA 和 libB 的对象,因此当 A.h 或 A.cpp 或 B.h 或 B.cpp 发生变化时,应再次进行 所以,我现在将我的makefile更改为
test: test.o ../../libA.a ../../libB.a
g++ -I.. -L../../lib test.o -o test -lA -lB
现在,问题是我如何修改它,以便它只有在它 依赖项比“测试”更新。 没有直接的规则来制作 libA 和 libB,这是 Makefile 要求和抱怨的; 因为我将这些库从目录 A 和 B 复制到目录 project/lib 中。
所以,我想一种解决方案是在各自的目录 A 和 B 中调用 make 当任何东西都比“测试”新时,但我该怎么做呢?或者,任何其他更好的解决方案都值得赞赏。
非常感谢:)
编辑
我做了什么,它解决了问题
.PHONY : libA libB../../libA.a:libA 库: cd pathtoDirA; $(制作)
../../libB.a : libB 库B: cd pathtoDirB; $(制作)
【问题讨论】: