管理Make文件中的依赖复杂性

时间:2012-09-28 15:39:11

标签: c++ makefile dependencies object-files

我正在开发我的第一个开源C ++项目:https://github.com/jehugaleahsa/spider-cpp

我正在管理我自己的Makefile,并且我有关于如何管理依赖项的“最佳实践”问题。现在,我使每个.o文件依赖于.cpp文件中包含的每个头文件。所以:

code.o: code.cpp code.hpp dep1.hpp de2.hpp
    g++ -c code.cpp

首先,我非常确定Make支持创建目标文件的简写。如果有人会举例说明这一点,我会很感激。

接下来,有没有办法避免将每个包含的标头列为依赖项?我想确保我是否更改了依赖项,但更改仍然是兼容的。列出包含的标题很繁琐,容易搞砸。

2 个答案:

答案 0 :(得分:2)

OP:

  

首先,我非常确定Make支持创建目标文件的简写。如果有人会举例说明这一点,我会很感激。

来自here

OBJS := foo.o bar.o

#Your program should have the objects as dependencies, and link them
proggie: $(OBJS)
gcc $(OBJS) -o proggie


# compile
%.o: %.c
    gcc -c $(CFLAGS) $*.c -o $*.o

OP:

  

接下来,有没有办法避免将每个包含的标题列为依赖项

降低on the same page,请参阅以下行:

# pull in dependency info for *existing* .o files
-include $(OBJS:.o=.d)


# compile and generate dependency info
%.o: %.c
    gcc -c $(CFLAGS) $*.c -o $*.o
    gcc -MM $(CFLAGS) $*.c > $*.d

基本上这样做是使用gcc的-MM选项来获取头文件列表,现在我们可以依赖它们了。因此,我们将包含此类头文件列表的文件输出到.d文件,然后下次将文件列表添加为依赖项,这是-include命令的作用。如果依赖项.d文件尚不存在,“-”可以避免错误。

注意,您应修改上述内容以考虑.cpp个文件

答案 1 :(得分:0)

是的,make支持创建目标文件的简写。这称为规则。是的,有一种方法可以避免将每个包含的标题列为依赖项。 g ++ / gcc有-MM选项,它将生成完整的依赖列表。

不幸的是,关于如何做到这一点没有简单的解释,我可以放在这里..你必须阅读文档并使用make实用程序。我发现这本书非常有用:“使用GNU Make管理项目”。在GNU网站上有​​一个文档,但我发现它有点难以阅读。 www.gnu.org/software/make/manual/make.html