c++ - 为什么我需要使用 CGAL 和 CMake 构建我的 C++ 程序?

标签 c++ linker codeblocks cgal

试图了解整个编译+链接业务的初学者。为什么我不能像往常一样使用 CGAL 库构建我的 C++ 程序,而需要使用 CMake 来构建它?

其他问题:我可以在 IDE 中使用 CMake 进行构建吗? (例如 Code::Blocks?)

@Mike:这就是我从阅读中得到的 CGAL documentation .我是不是误会了什么?

最佳答案

您在某种程度上被您引用的 CGAL 文档误导了。

CGAL 开发人员选择 CMake 作为 CGAL 的构建系统 源码包。它是一个流行的构建系统(卓越的跨平台可移植性)。他们还说明了 使用 CMake 构建示例程序;很自然,因为 这些示例是源代码包的一部分。他们还建议您使用 CMake 以构建您自己的依赖于 CGAL 的程序。

他们推荐 CMake 是很公平的,他们这样做并不奇怪。 但是:当您想编写依赖于任何库的程序时 - libfoo - 你继续假设 libfoo已经安装好了 在你的项目中使用。这意味着:

  • libfoo头文件 - foo.h , 随便 - 定义图书馆的 编程接口(interface)在您系统的某个地方,以便您的编译器 可以在您写作时找到并阅读它们,例如#include <foo.h>在你的代码中。

  • libfoo二进制文件 - libfoo.a , libfoo.so , foo.lib , foo.dll , libfoo.dylib ,视情况而定,适用于您的操作系统 - 包含 库的实现也在你系统的某个地方所以 您的链接器可以找到它们并将它们与您的目标代码链接起来 程序来制作一个完整的可执行文件。 (并且,在动态的情况下 库,运行时加载器可以找到它们的地方)。

因此,就构建您的程序而言,这根本无关紧要 如何libfoo头文件和二进制文件必须位于它们在您的位置上 系统,无论是由 CMake 还是由仙女放在那里。重要的是他们是 那里。然后,如果需要,您可以使用 CMake 或任何其他方式构建您的程序 您喜欢的其他方式。

当然,当你决定编写你的程序时,情况可能是这样的 libfoo 还没有安装在您的系统上。在那种情况下,你 安装它。然后假设它是 安装

您需要安装 CGAL 库和头文件。那会 通常可以通过安装 libcgal 来实现 (Linux/OS X)开发包 由您的操作系统使用其包管理器提供,或 (Windows) 通过下载 并运行安装程序。那么你不需要知道或关心 CGAL 如何 建成。

如果由于某种原因无法获得开发包或对技术感兴趣 在“从第一原则”安装库时,您需要构建和 从源码包安装它。由于源包的构建系统是 CMake,您需要学习如何使用 CMake 构建和安装它,然后执行此操作。

安装 CGAL 后,要在您自己的项目中使用,您只需要注意 使用库的常规要求:-

  • 你告诉编译器在哪里可以找到库的头文件,如果它们是 不在其任何默认包含目录中。
  • 您告诉链接器链接库。
  • 你告诉链接器在哪里可以找到库,如果它不在它的其中一个 默认搜索目录。

无论您是使用 CMake、Scons、Autotools、makefile、项目 在您的 IDE 中设置或简单地在命令提示符下运行您的编译器和链接器 使用正确的选项完全是您自己的选择。 (虽然最后是 最有效的指导,当你是一个试图理解的初学者时 整个编译和链接业务)。

CGAL 示例程序可以像普通的 Code::Blocks 一样构建 具有库依赖性的简单项目,只要你安装了 CGAL 事先以某种方式。

关于c++ - 为什么我需要使用 CGAL 和 CMake 构建我的 C++ 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42165945/

相关文章:

c++ - 棘手的 undefined reference 错误

c++ - 文件格式无法识别;视为链接描述文件

c - 深度递归错误

linux - 在 Code::Blocks 中运行构建脚本而不是构建目标

c - 如何使用 FILE 结构的成员打印文件中的第一个字符?

c++ - OpenGL header 中的平台特定宏

c++ - 如何编写用于 set_symmetric_difference [C++] 的字符串比较器?

c++ - 使用不同的enable_if条件选择方法

ios - libz.dylib 与 libz.1.2.3.dylib 与 libz.1.2.5.dylib

c++ - 如何生成包含所有依赖项的静态库?