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

Why do I need to build my C++ program using CGAL with CMake?

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

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

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

您可以在调用cmake 时在命令行中传递代码块生成器。它将创建您需要使用的文件,并使用您的 ide.

进行构建

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

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

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

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

  • libfoo 二进制文件 - libfoo.alibfoo.sofoo.libfoo.dlllibfoo.dylib,视情况而定,您的 OS - 包含 库的实现也在你系统的某个地方所以 您的 link 人可以找到它们并 link 使用您的对象代码找到它们 程序来制作一个完整的可执行文件。 (并且,在动态的情况下 库,运行时加载程序可以找到它们的地方)。

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

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

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

如果由于某种原因无法获得开发包或对技术感兴趣 在安装库 "from first principles" 时,您需要构建和 从源码包安装它。由于源包的构建系统是 CMake,你需要学习如何使用 CMake 构建和安装它,然后这样做。

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

  • 你告诉编译器在哪里可以找到库的头文件,如果它们是 不在任何默认值 include-directories.
  • 你告诉 linker link 图书馆。
  • 你告诉 linker 在哪里可以找到库,如果它不在其中之一 默认 search-directories.

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

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