如何以独立于系统的方式将库添加到项目中?

时间:2013-01-31 03:10:01

标签: c++ qt libraries environment

我正在使用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。

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

1 个答案:

答案 0 :(得分:2)

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

我希望我能推荐一种替代方案,只是为了减少对cmake的偏见,但我还没有听说过与它真正比较的任何东西,特别是为了找到外部依赖项和使用不同的平台。我猜Boost.Build也很不错。