源代码依赖项

时间:2010-09-21 00:39:24

标签: c++ c dependencies build-dependencies

假设我有一堆C ++文件:A.cc,B.cc,C.cc及其相关的头文件。 A.cc使用B.cc中的类等。

现在说我要构建源文件。在预处理阶段之后,理论上我可以同时编译(不链接)所有文件吗? (A.cc - > A.obj,......)

我只是想知道是否曾经有一段时间我必须等到编译B.cc之前完成编译A.cc。

4 个答案:

答案 0 :(得分:8)

不,除非你确实做了一些奇怪的事情,否则B.cc 的编译将取决于编译A.cc的结果(反之亦然)。这就是为什么make -j(并行运行多个“作业”,即进程,每个编译文件同时)是一种流行的用法,特别是当然在多核机器上(但不仅仅是那些,因为即使没有多个内核,最终的可能的少量同时作业比任意序列化的同一组作业完成得更快 - 一个可能被阻塞等待磁盘I / O而另一个是编辑CPU密集型部分... ... ...只要你有足够的可用物理RAM,那就是; - )。

答案 1 :(得分:0)

这就是标题的用途,对吧? make -j N会为你做这件事,虽然它基于易错的用户生成的Makefile。

答案 2 :(得分:0)

只有一种情况,您实际上需要这样的依赖:当一个文件生成稍后编译的C ++代码时。 Make足够灵活,可以支持这一点。但是当你想到你的常规项目时,不,你不想也不应该有这样的依赖。

答案 3 :(得分:-1)

文件末尾的扩展名或多或少毫无意义。重要的是你已经对你想要编译的所有类都有一个完整的定义,即使它们尚未实现。因为.h和.cc或.cpp扩展名是任意的,所以最重要的是文件的内容。

一般来说,如果您能够完全描述该类的对象,那么您将不会遇到问题。如果类定义在您设置的链中尚不存在(这可能发生在循环相关的标题中),那么您必须做一些魔术。

重点是,如果你遇到这个问题,它真的取决于你作为设计师/开发者