gpt4 book ai didi

c++ - 如何了解 C++ 链接/依赖项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:08 24 4
gpt4 key购买 nike

我是一名 Java 开发人员,我从不需要担心包含文件或弄乱 BUILD 文件。

每当我需要编写 C++ 代码时,事情就会变得更加复杂。我可以考虑创建 *.h 文件作为 Java 中的接口(interface),但弄清楚如何编写构建文件以及应包含哪些顺序类让我很头疼。

有没有一种简单的方法来考虑这个问题?您如何知道何时包含某些内容或如何正确地将内容分开。例如,处理一个包含数十个相互依赖的源文件的项目通常是什么好方法。

是否有一些框架可以让创建 BUILD 文件或管理所有这些样板编译内容变得更容易接受?

最佳答案

CMake是迄今为止我能找到的最好的构建系统。您给它一个源文件列表,它会自动扫描依赖项并仅重新编译更改的文件。虽然它的语法有点滑稽,而且文档也不是很容易访问,但 CMake 在可用性和简单性方面胜过 GNU autotools,并且它适用于所有主要平台。

关于您对正在发生的事情的“心智模型”,请记住以下几点。

  • .cpp 文件的编译完全独立于其他.cpp 文件。

  • .cpp文件被编译器从上到下读取,只读取一次。因此,事情需要按正确的顺序进行。

  • #include 指令等同于将 header 复制/粘贴到 .cpp 文件中。

  • 在使用函数的地方,需要该函数的声明,但不一定是定义

  • 在访问类成员时,需要类的定义。从一个类派生也需要它的定义。采用指针或引用不需要定义,但需要声明。在 header 中利用这一点:而不是包含 Foo.hpp,看看您是否可以只声明 class Foo;

    <
  • 编译 .cpp 文件时,会生成一个 .o 文件,其中包含在 定义 中的那些函数的实现.cpp。对其中未定义的函数的引用留给链接器解析。

  • 链接器将所有这些定义放在一个可执行文件中,但每个函数定义必须恰好出现一次。 (模板和内联函数除外。)

关于c++ - 如何了解 C++ 链接/依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com