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

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

有没有简单的方法可以考虑这一点?您怎么知道什么时候包括一些东西或如何正确地将它们分离出来。例如,通常是处理具有数十个相互依赖的源文件的项目的好方法。

是否有一些框架可以使创建BUILD文件或管理所有样板编译工作更容易?

最佳答案

CMake是到目前为止我能找到的最好的构建系统。您给它一个源文件列表,它将自动扫描依赖关系并仅重新编译更改的文件。尽管它的语法有点可笑,并且文档访问不是很方便,但是CMake在可用性和简单性方面击败了GNU自动工具,并且可以在所有主要平台上使用。

关于正在发生的事情的“心理模型”,请牢记以下几点。

  • .cpp文件完全独立于其他.cpp文件进行编译。
  • 编译器从上至下仅读取一次.cpp文件。因此,事情需要按照正确的顺序进行。
  • #include指令与将 header 复制/粘贴到.cpp文件中相同。
  • 在使用函数时,需要该函数的声明,但不一定是定义。
  • 在访问类成员时,需要定义该类。从类派生也需要对其进行定义。采用指针或引用不需要定义,但是需要声明。在 header 中利用它来发挥自己的优势:不用包括Foo.hpp,而是看看是否可以只声明class Foo;
  • 编译.cpp文件时,将生成一个.o文件,其中包含与.cpp中定义的功能完全相同的实现。未在其中定义的功能的引用留给链接器解决。
  • 链接器将所有这些定义放到一个可执行文件中,但是每个函数定义必须只存在一次。 (模板和内联函数是一个异常(exception)。)
  • 关于c++ - 如何掌握C++链接/依赖关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3482894/

    10-10 18:42
    查看更多