源文件的编译顺序是如何决定的?

发布于 2024-07-16 08:45:38 字数 113 浏览 6 评论 0原文

我有一个工作区,其中包含许多我编译的 *.c 文件。 (我可以使用任何工具链,例如 MSVC6.0 或 gcc 等)

首先编译哪个源文件?

后续编译的文件顺序是如何决定的?

I have a workspace containing many *.c files, which I compile. (I could use any toolchain say MSVC6.0, or gcc etc)

Which source file is compiled first?

How is the order of the files to be compiled subsequently decided?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

明月夜 2024-07-23 08:45:38

C 标准没有指定编译顺序。

由于不需要像 C++ 那样构造全局对象,因此 C 中不存在编译顺序相关的情况。

The order of compilation is not specified by the C standard.

Since there is no need for the construction of global objects like in C++, there is no situation where the order of compilation is relevant in C.

岁吢 2024-07-23 08:45:38

一般来说,这在任何地方都没有指定。 特别是当使用例如。 并行make,编译的顺序几乎是任意的。

Generally, this is not specified anywhere. Especially when using eg. parallel make, the order of compilation is pretty much arbitrary.

寂寞美少年 2024-07-23 08:45:38

VC:按项目文件夹,然后按字母顺序排列。
GCC:根据make文件顺序

为什么这很重要?,完成顺序不计量也不影响最终的构建结果。

VC: By project folder, then alphabetically.
GCC: according to the make file order

Why is this important?, the completion order don't meter and doesn't effect the final build result.

寒尘 2024-07-23 08:45:38

使用 make

  • 目标按照它们出现的顺序进行寻址
  • 为每个目标构建依赖树,我猜测该树是通过后序评估深度优先遍历的(似乎是唯一的)它会起作用,但我在文档中找不到任何指定这一点的内容)

作为 jpalecek 建议,并发构建可能会更复杂。


GNU make 文档中的一些引用:

目标的双冒号规则按照它们在 makefile 中出现的顺序执行。

...

如果您指定了多个目标,请按照您命名的顺序依次处理每个目标。

With make:

  • The targets are addressed in the order they appear
  • A dependency tree is built for each target and I would guess that the tree is traversed depth-first with post-order evaluation (seems to be the only way it will work, but I can't find anything that specifies this in the documentation)

As jpalecek suggests, concurrent builds may be more complicated.


Some quotes from the GNU make docs:

The double-colon rules for a target are executed in the order they appear in the makefile.

...

If you specify several goals, make processes each of them in turn, in the order you name them.

oО清风挽发oО 2024-07-23 08:45:38

如果这很重要,那么您确实需要在 makefile 中设置依赖项,以确保某些依赖项先于其他依赖项构建。 事实上,你应该首先问自己为什么这很重要。

If it matters then you really need to set dependencies in your makefile to ensure some are built before others. Really you should first ask yourself why it matters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文