为什么我需要使用 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.a
、libfoo.so
、foo.lib
、foo.dll
、
libfoo.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
事先以某种方式。
试图理解整个编译+链接业务的初学者。为什么我不能像往常一样使用 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.a
、libfoo.so
、foo.lib
、foo.dll
、libfoo.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 事先以某种方式。