我正在开发我的第一个开源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支持创建目标文件的简写。如果有人会举例说明这一点,我会很感激。
接下来,有没有办法避免将每个包含的标头列为依赖项?我想确保我是否更改了依赖项,但更改仍然是兼容的。列出包含的标题很繁琐,容易搞砸。
答案 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