如何使用CMake构建和链接外部库?

时间:2015-06-30 00:48:43

标签: cmake

首先,我应该说我已经看到了类似于我的问题的答案,但它们似乎都没有对我有意义。这是:

说我有以下简单的CMakeLists:

cmake_minimum_required (VERSION 2.8)
project (Example)
add_executable (Example Main.cpp)

然后,我想将已拥有自己的CMakeLists的库(例如glfw)与Example相关联。当然,这会产生如何正确设置构建顺序的问题。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

  1. 首先构建外部依赖关系。
  2. 添加函数调用以查找外部库。如果您可以找到它或者使用find_package等自己编写,可以使用find_library的FindGLFW.cmake。有关包含外部库的更多信息,请参阅CMake wiki
  3. 将包含和库添加到Example可执行文件中。
  4. 这就是如何使用CMake,我不明白为什么没有在互联网的来源中回答。

答案 1 :(得分:1)

首先让我描述一下如何为GLFW做些什么。有关各种变化,请参阅下面的注释。

  1. 构建GLFW。由于官方GLFW负责人的CMake支持是currently broken,请使用此shaxbee分支:

    git clone https://github.com/shaxbee/glfw.git
    cmake -Hglfw -Bbuild/glfw -DCMAKE_INSTALL_PREFIX=inst -DCMAKE_BUILD_TYPE=Release
    cmake --build build/glfw --target install --config Release
    
  2. 此安装步骤将安装inst/lib/cmake/glfw3/glfw3Config.cmake glfw3配置模块,客户端项目将使用该模块来查找GLFW。

    1. 您的项目应如下所示:

      cmake_minimum_required(VERSION 2.8)
      project(Example)
      find_package(glfw3 REQUIRED)
      add_executable(Example Main.cpp)
      target_link_libraries(Example glfw3)
      
    2. find_package命令找到创建glfw3Config.cmake库的IMPORTED,CMake目标,其中包含在项目中使用GLFW所需的所有信息。 target_link_libraries命令告诉CMake不仅要链接到GLFW,还要使用它的include目录和编译标志。

      1. 使用-DCMAKE_PREFIX_PATH=inst配置项目(必要时使用完整路径)
      2. 注意:其他配置模块或查找模块可能不提供IMPORTED目标。请参阅实际配置或查找模块以获取帮助。它们通常会提供<PACKAGE>_INCLUDE_DIRS<PACKAGE>_LIBRARIES个变量,这些变量应添加到目标的相应设置中:

            target_include_directories(mytarget ${ZLIB_INCLUDE_DIRS})
        

            include_directories(${ZLIB_INCLUDE_DIRS})
        

        target_link_libraries / link_libraries相同。