美文网首页C语言
cmake学习小结

cmake学习小结

作者: HarveyYang777 | 来源:发表于2020-04-20 11:25 被阅读0次

    CMake简介

    CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。

    在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

    1. 编写 CMake 配置文件 CMakeLists.txt
    2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的区别在于前者提供了一个交互式的界面)。其中, PATH 是 CMakeLists.txt 所在的目录
    3. 使用 make 命令进行编译

    使用举例

    目录结构:

    
    ./Demo
        |
        +--- main.cc
        |
        +--- sub/
              |
              +--- SubFunctions.cc
              |
              +--- SubFunctions.h
    
    

    根目录中的 CMakeLists.txt :

    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    
    # 项目信息
    project (Demo)
    
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_SRCS 变量
    aux_source_directory(. DIR_SRCS)
    
    # 添加 sub 子目录
    add_subdirectory(sub)
    
    # 指定生成目标 
    add_executable(Demo main.cc)
    
    # 添加链接库
    target_link_libraries(Demo SubFunctions)
    
    

    子目录中的 CMakeLists.txt:

    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_LIB_SRCS 变量
    aux_source_directory(. DIR_LIB_SRCS)
    
    # 生成链接库
    add_library (SubFunctions ${DIR_LIB_SRCS})
    
    

    编译项目

    在当前目录执行 cmake . ,得到 Makefile 后再使用 make 命令编译得到 Demo可执行文件

    自定义编译选项

    CMake 允许为项目增加编译选项,从而可以根据用户的环境和需求选择最合适的编译方案

    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    
    # 项目信息
    project (Demo4)
    
    # 加入一个配置头文件,用于处理 CMake 对源码的设置
    configure_file (
      "${PROJECT_SOURCE_DIR}/config.h.in"
      "${PROJECT_BINARY_DIR}/config.h"
      )
    
    # 是否使用自己的 DefineFunctions 库
    option (USE_MYDEFINE
           "Use provided  implementation" ON)
    
    # 是否加入 DefineFunctions 库
    if (USE_MYDEFINE)
      include_directories ("${PROJECT_SOURCE_DIR}/sub")
      add_subdirectory (sub)  
      set (EXTRA_LIBS ${EXTRA_LIBS} SubFunctions)
    endif (USE_MYDEFINE)
    
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_SRCS 变量
    aux_source_directory(. DIR_SRCS)
    
    # 指定生成目标
    add_executable(Demo ${DIR_SRCS})
    target_link_libraries (Demo  ${EXTRA_LIBS})
    
    1. configure_file 命令用于加入一个配置头文件 config.h ,这个文件由 CMake 从 config.h.in 生成,通过这样的机制,将可以通过预定义一些参数和变量来控制代码的生成
    2. option 命令添加了一个 USE_MYMATH 选项,并且默认值为 ON
    3. USE_MYMATH 变量的值来决定是否使用我们自己编写的 MathFunctions 库

    安装和测试

    CMake 也可以指定安装规则,以及添加测试。这两个功能分别可以通过在产生 Makefile 后使用 make install 和 make test 来执行

    相关链接

    官方文档:https://cmake.org/cmake/help/cmake2.4docs.html

    相关文章

      网友评论

        本文标题:cmake学习小结

        本文链接:https://www.haomeiwen.com/subject/zrvpvhtx.html