Cmake入门必看教程
发布日期:2021-05-07 15:11:57 浏览次数:16 分类:精选文章

本文共 2502 字,大约阅读时间需要 8 分钟。

CMake入门:从简单项目到复杂构建

CMake是一种强大的跨平台建造工具,能够自动生成Makefile文件,简化构建过程。它特别适合管理复杂项目,同时支持多平台和模块化构建。本文将从简单的Hello World项目入手,逐步展开,帮助您理解CMake的核心功能。


项目简介

CMake的主要作用是为项目自动生成Makefile文件。虽然它的功能远不止此,但本文将聚焦于这一核心功能。通过实际例子,我们将展示如何使用CMake管理简单项目,以及如何扩展到更复杂的构建需求。


源代码与示例

本文所有代码均来自GitHub仓库exploringBB/extras/cmake,所有示例均可在Ubuntu上顺利运行。以下是代码的基本结构和使用说明。

git clone https://github.com/derekmolloy/exploringBB.git

示例1:Hello World

项目结构:

  • CMakeLists.txt(3行内容)

    cmake_minimum_required(VERSION 2.8.9)
    project(hello)
    add_executable(hello helloworld.cpp)
  • extras/cmake/helloworld/(包含源文件)

    #include 
    int main(int argc, char *argv[]){
    std::cout << "Hello World!" << std::endl;
    return 0;
    }

步骤:

  • 生成Makefile:

    cmake -DCMAKE_INSTALL_PREFIX=/usr .

    请注意,-DCMAKE_INSTALL_PREFIX 参数用于指定安装路径,可根据需要调整。

  • 编译项目:

    make
  • 运行程序:

    ./hello
  • 通过以上步骤,我们就成功构建并运行了一个简单的Hello World项目。


    示例2:包含目录结构的项目

    项目结构:

    • CMakeLists.txt(新增的内容)
      cmake_minimum_required(VERSION 2.8.9)
      project(directory_test)
      include_directories(include)
      file(GLOB SOURCES "src/*.cpp")
      add_executable(testStudent ${SOURCES})

    步骤:

  • 生成Makefile:

    mkdir build
    cd build
    cmake ..
  • 编译项目:

    make
  • 运行程序:

    ./testStudent
  • 通过这个示例,我们可以看到CMake在处理包含目录结构的项目时的优势。它能够自动识别源文件并构建可执行文件,减少了传统Makefile的冗余配置。


    示例3:动态库编译(.so)

    项目结构:

    • CMakeLists.txt(新增的内容)
      cmake_minimum_required(VERSION 2.8.9)
      project(directory_test)
      set(CMAKE_BUILD_TYPE Release)
      include_directories(include)
      file(GLOB SOURCES "src/*.cpp")
      add_library(testStudent SHARED ${SOURCES})
      install(TARGETS testStudent DESTINATION /usr/lib)

    步骤:

  • 生成Makefile:

    mkdir build
    cd build
    cmake ..
  • 编译项目:

    make
  • 安装动态库:

    sudo make install
  • 通过这个示例,我们学会了如何使用CMake构建动态库项目,并将其安装到指定目录。


    示例4:静态库编译(.a)

    项目结构:

    • CMakeLists.txt(修改后的内容)
      cmake_minimum_required(VERSION 2.8.9)
      project(directory_test)
      set(CMAKE_BUILD_TYPE Release)
      include_directories(include)
      file(GLOB SOURCES "src/*.cpp")
      add_library(testStudent STATIC ${SOURCES})
      install(TARGETS testStudent DESTINATION /usr/lib)

    步骤:

  • 生成Makefile:

    mkdir build
    cd build
    cmake ..
  • 编译项目:

    make
  • 安装静态库:

    sudo make install
  • 通过这个示例,我们掌握了如何使用CMake构建静态库项目,并将其安装到指定目录。


    示例5:使用静态库或动态库

    项目结构:

    • CMakeLists.txt(示例内容)
      cmake_minimum_required(VERSION 2.8.9)
      project(TestLibrary)
      set(CMAKE_BUILD_TYPE Release)
      include_directories(~/exploringBB/extras/cmake/studentlib_shared/include)
      add_executable(libtest libtest.cpp)
      target_link_libraries(libtest ${PROJECT_LINK_LIBS})

    步骤:

  • 生成Makefile:

    mkdir build
    cd build
    cmake ..
  • 编译项目:

    make
  • 通过这个示例,我们学会了如何在项目中动态或静态链接库文件,充分发挥CMake的优势。


    总结

    通过以上示例,我们可以看到CMake在项目管理中的强大能力。它不仅支持简单的Hello World项目,还能处理包含目录结构的复杂项目、动态库和静态库的构建。CMake的灵活性和可扩展性使其成为专业开发者的必备工具。

    上一篇:Nginx学习笔记之Nginx初识
    下一篇:CentOS8 字体大小调整

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年03月20日 21时53分58秒