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

Add an external library (e.g., Eigen) via CMake

几周来我一直在处理这个问题。我知道我可能只是错过了一个我不知道的小步骤。因此,我们将不胜感激任何见解。

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

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

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

还有什么需要我做的吗?

现在,假设我想添加另一个库,如 XGBoost(它有头文件和源文件)。会有什么不同?

我为 XGBoost 做了类似的事情。我的代码可能没有错误地构建,但只要我不引用库中的任何函数(基本上只是将库添加到我的项目而不使用它)。当我尝试使用任何功能时,我收到有关 "unresolved external symbol"s 的错误,这让我觉得我在添加库时遗漏了一些东西。

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

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

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

关于 XGBoost linking,他们只是为该项目添加了 cmake 文件。因此,您需要做的是在 Visual Studio 中构建该项目。构建后,您将获得 .lib、.dll 和 .exe 文件。您应该只需要 .lib 文件。将它们复制并粘贴到项目目录中的某处,然后 link 像这样将其粘贴到主项目中:

TARGET_LINK_LIBRARIES(ProjectName libxgboost)

然后,您必须处理并将包含目录(包含头文件)从 xgboost 目录粘贴到项目目录中的某个位置。除了 libxgboost 之外,您还必须包含 rabit 和 xgboost 库。因此,当您使用 'target_link_directories'.

复制和粘贴 libxgboost.lib 和 link 时,只需复制并粘贴它们

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

希望这可以帮助其他难以使用它的人。