我有一系列源代码目录如下
main --- src1
|-src2
|-src3
我的make系统会生成依赖文件(*.d
)以及目标文件(*.o
)。
使用以下代码生成dependacy文件。
%.d: %.c
@echo calculating dependencies for $*.o
@if $(CC) $(CPPFLAGS) -MM -MG -MP -MT $*.o $< -MF temp.d; then \
echo $@ "`cat temp.d`" >$@; \
rm temp.d; \
else \
rm -f temp.d; \
rm -f $@; \
false; \
fi;
我想将依赖项文件和目标文件移动到两个单独的文件夹objects
和dependency
。
它们与主文件夹处于同一级别。如何使用Make
子系统
答案 0 :(得分:1)
你应该看看:
http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
也许最好的方法是生成依赖文件作为编译的副作用,而不是以特定的规则显式生成它们,这样:
gcc
一次,而不是每个目标两次gcc -MMD
将生成.d
个文件.d
制作包含所有-include
个文件的内容,这样如果它们不存在就会发牢骚但如果它们存在则会读取mv
可以在编辑后随时移动它们。所以我预先删除了你的%.d:%。c规则,删除了.d
个文件的依赖关系,并且只包含了依赖项目录中的所有.d
个文件。
我也会避免if; then; else; fi
,只是做一个简单的事情:
gcc ... -MMD ...
cp ...
(将-MMD和其他依赖关系相关的标志放在像DEPFLAGS
这样的变量中。)
如果gcc
失败,cp
将无法执行,则只会抱怨gcc
失败并退出。
然后,要移动目标文件,那么简单:
place_where_you_want_your_obj_files/%.o: place_where_gcc_put_them/%.o
mv $< $@