1

我正在开发我的第一个开源 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 支持创建目标文件的简写。如果有人能举个例子,我会很感激的。

接下来,有没有办法避免将每个包含的标头列为依赖项?我想确保如果我更改依赖项,这些更改仍然兼容。列出包含的标题既乏味又容易搞砸。

4

2 回答 2

2

操作:

首先,我很确定 Make 支持创建目标文件的简写。如果有人能举个例子,我会很感激的。

这里

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

操作:

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

在同一页的下方,请参阅以下几行:

# 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文件

于 2012-09-28T16:10:08.063 回答
0

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

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

于 2012-09-28T16:09:26.817 回答