【发布时间】:2009-09-03 16:59:03
【问题描述】:
我正在使用 gcc -MM 生成将源文件编译为目标文件的依赖规则的先决条件。我想在某个变量 BIN_DIR=bin/release/ 的值中指定一个目录来保存目标文件和可执行文件。有两种情况:
案例 1
%.d: *.h *.cc Makefile
@$(CXX) -MM $(CXXFLAGS) *.cc > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; $(RM) -rf $@.$$$$
虽然对 sed 不熟悉,但我了解到 sed 实用程序的目的是翻译(例如):
main.o : main.cc defs.h
进入:
main.o main.d : main.cc defs.h
我的问题是如何将其进一步更改为: bin/release/main.o bin/release/main.d : main.cc defs.h
如果有人可以在这里解释sed的用法,那将不胜感激!
案例 2
Makefile.depend: *.h *.cc Makefile
$(CXX) -MM $(CXXFLAGS) *.cc > Makefile.depend
在 Makefile.depend 文件中,你会看到每个规则都像这个例子:
main.o : main.cc defs.h
如何改成:
bin/release/main.o : main.cc defs.h
感谢和问候!
注意:
我不知道为什么我现在不能发表评论。所以我把我的更新放在这里:
VPATH 是指定源代码的目录。但是你必须从你想要目标文件的位置运行 make -f path2Makefile 。在这里,我希望能够从任何地方运行 make -f path2 Makefile。所以最好为目标文件指定目录。
测试版:
感谢您的帮助!请原谅我无法对您的回答发表评论。 在第二种情况下,您的方法的问题在于,在命令之后,一些包含多行的规则将在每一行收到前缀。例如
main.o : main.cc defs.h \
src/misc.h
变成:
$(BIN_DIR)main.o : main.cc defs.h \
$(BIN_DIR) src/misc.h
【问题讨论】:
-
哦,对不起。自从我接触我的依赖处理程序以来已经有一段时间了,所以我忘记了。让我尝试修复它...