2

我正在使用 Qt 和 OpenGL 开发应用程序,并发现有必要下载 GLM 库。它是一个只有标题的库,所以我不需要链接到任何东西。我希望这个应用程序建立在任何安装了正确库的系统上。我的问题是我不知道将 GLM 放在哪里,以便系统可以在不向项目的 .pro 文件添加特定路径的情况下找到它。.pro 文件是我的 git 存储库的一部分,这是将源代码分发到 Linux 等其他系统的方式。所以我不希望这个文件指定 GLM 的确切位置,因为其他系统可能在其他地方有它.

我目前正在 Windows 上开发,使用 Visual C++ 2010 在 Qt Creator 中进行编译。我从MSDN中读到#include <file>使用 INCLUDE 环境变量进行搜索,所以我尝试将 glm.hpp 的路径添加到 INCLUDE,但 QtCreator 的构建环境为这个项目似乎覆盖了 INCLUDE。所以我从 QtCreator 的 Projects 选项卡中将 GLM 的路径附加到新的 INCLUDE 中,但我的代码仍然找不到 glm.hpp。

一般来说,我如何向我的系统添加一个外部库,以便我的编译器能够在不指定分发到其他系统的项目文件中的确切位置的情况下找到它?

4

1 回答 1

2

您需要的是一个构建系统,该系统能够在系统中搜索您请求的库,并且能够在任何平台上执行此操作。一个这样的构建系统是cmake,它是使用最广泛的构建系统。从本质上讲,cmake 允许您编写一个构建脚本,您可以在其中指定在 Qt Creator 或 Visual Studio 中创建项目时通常指定的所有内容,例如源文件列表,按目标分组以编译(库、可执行文件、等),头文件的相对路径,以及用于链接和包含路径的库,等等。对于安装在系统上的库,有一个函数,称为find_package()(cmake 脚本命令的一部分),它将查明是否安装了库以及在哪里可以找到它的 lib 文件和头文件(将这些路径存储为可以在目标等上指定的缓存字符串)。只要库没有安装在奇怪的地方,它通常效果很好。它的工作方式是,当您运行 cmake 时,它​​将为您指定的几乎任何平台生成构建脚本/配置,然后您使用它来编译您的代码。它可以生成 makefile(类 Unix 或 windows)、CodeBlocks 项目文件、Visual Studio 项目文件等。而且许多 IDE 也对 cmake 项目提供原生支持。

我希望我可以推荐一个替代方案,只是听起来对 cmake 的偏见更少,但我还没有听说过任何真正与之相比的方法,特别是为了定位外部依赖项和使用不同的平台。我猜Boost.Build也不错。

于 2013-01-31T03:44:42.000 回答