通过CMake添加外部库(例如,Eigen)

时间:2016-06-23 19:11:44

标签: c++ cmake eigen xgboost

我几周来一直在处理这个问题。我知道我可能只是错过了一个我不知道的小步骤。所以,任何见解都会受到高度赞赏。

我正在尝试添加一些外部库并在我的C ++项目中使用它们。但似乎无法弄清楚如何。我在互联网上阅读了关于添加外部库的所有帖子,但我相信我错过了一些东西!

让我们说,我想添加一个像Eigen这样的简单库(一个只有头的库)。我复制并粘贴了包含项目子文件夹中所有文件的文件夹。我调用了子文件夹ThirdPartyLibraries。

INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen")

还有什么我需要做的吗?

现在,假设我要添加另一个类似XGBoost的库(包含头文件和源文件)。它会有什么不同?

我为XGBoost做了类似的事情。我的代码可以构建没有错误,但只要我没有引用库中的任何函数(基本上只是将库添加到我的项目而不使用它)。当我尝试使用任何函数时,我得到关于“未解析的外部符号”的错误,这让我觉得我在添加库时遗漏了一些东西。

我没有在我的C ++代码中添加任何库。所以,如果你能让解释变得简单,那就太好了!

1 个答案:

答案 0 :(得分:2)

所以,我解决了这个问题,并认为我可以为其他任何可能遇到此问题的人分享解决方案。

添加Eigen库非常简单,因为它只是头文件。您只需将所有头文件复制并粘贴到项目目录中的某个位置,然后使用include目录。你应该没事。

关于XGBoost链接,他们只是添加了该项目的cmake文件。因此,您需要做的是在Visual Studio中构建该项目。构建之后,您将获得.lib,.dll和.exe文件。您应该只需要.lib文件。将它们复制并粘贴到项目目录中的某个位置,并将其链接到主项目,如下所示:

TARGET_LINK_LIBRARIES(ProjectName libxgboost)

然后,您必须处理并将xgboost目录中的include目录(包含头文件)粘贴到项目目录中的某个位置。除了libxgboost之外,你还必须包含rabit和xgboost库。因此,只需在复制并粘贴libxgboost.lib时复制并粘贴它们,并使用“target_link_directories”链接它们。

当您使用库中的任何功能时,请确保包含头文件。

希望这可以帮助那些很难让其工作的人。