如何将库添加到 CMakeLists?

Posted

技术标签:

【中文标题】如何将库添加到 CMakeLists?【英文标题】:How do you add libraries to CMakeLists? 【发布时间】:2014-12-31 20:01:11 【问题描述】:

到处搜索后,我找不到任何东西或任何人来帮助我弄清楚如何将 GL GLEWSDL2 库添加到我的 CMakeLists.txt强>。我正在使用 Ubuntu 14.04 LTS,并使用

安装了以下库
sudo apt-get install libsdl2-dev   #for SDL-2
sudo apt-get install libgl-dev     #for GL
sudo apt-get install libglew-dev   #for GLEW

这一切都很好,我可以用这个命令在 g++ 中编译

g++ ./main.cpp ./display.h ./display.cpp ./shader.cpp ./shader.h -l SDL2 -l GL -l GLEW

现在我需要切换到 CMake 编译器,但我不知道如何将库 GL、GLEW 和 SDL2 添加到 CMakeLists.txt。

【问题讨论】:

Linking against GLEW with CMake的可能重复 有a whole wiki entry in the official documentation关于这个主题,那里的说明尽可能清楚。 【参考方案1】:

包含库的方式取决于几件事。某些软件包(例如 sdl2)具有 pkg​​config 文件,这些文件定义了要使用的库和包含。

Cmake 带有一个 FindPkgConfig 模块,可以为您获取它。

例如:

include(FindPkgConfig)
pkg_check_modules(SDL2 REQUIRED sdl2)

target_link_libraries(executablename $SDL2_LIBRARIES)

您也可以使用 target_link_libraries 函数手动添加它们。

其他软件包具有“查找”模块,例如 GLEW:/usr/share/cmake-*/Modules/FindGLEW.cmake

如@Mikael Persson 所述,CMake 在手册页和他们的 wiki 上有很多很棒的文档。

【讨论】:

我用什么替换可执行文件名? SDL-2.h?我尝试什么都行? wiki 对我也没有多大帮助。我知道 C++,但我不知道如何用库编译 CMake。 可执行文件名是您最终要构建的程序的名称。例如,如果您正在编译一个名为“mygame”的程序,那么它将是“mygame”。您首先必须使用 add_executable() 函数定义可执行文件。例如,您的可能是 add_executable(mygame display.cpp shader.cpp) 有时简单的例子是向您展示某些东西的最佳方式。查看链接:CMakeLists.txt 以获取我的一个使用 CMake 的非常简单的单源程序的示例。复杂示例的另一个好来源是查看 KDE 项目的来源KDE 现在我有 SDL2 工作但对于 Glew 和 GL 它似乎不起作用。我有pkg_check_modules(GL REQUIRED gl)pkg_check_modules(GLEW REQUIRED glew) GLEW 没有 pkg​​config,但 cmake 有一个 FindGLEW 模块。您需要做的就是include(FindGLEW),它会设置$GLEW_LIBRARIES$GLEW_INCLUDE_DIRS 变量

以上是关于如何将库添加到 CMakeLists?的主要内容,如果未能解决你的问题,请参考以下文章

CMake 将库链接到一个库中

如何将库添加到交叉编译工具链?

如何将库项目添加到 android 项目?

如何将库路径添加到编译器

如何手动将库添加到 Visual Studio 2017 项目?

如何使用自制软件、cMake 和 cLion 将库添加到 C++ 项目