cmake构建和编译

什么是CMake?

CMake本身是一个工具集,由五个可执行的程序组成:cmake、ctest、cpack、cmake-gui和ccmake,其中cmake可以说是出镜率最高的明星级别程序了,它用于在构建项目的第一步,进行项目的配置、生成和构建项目的主要可执行文件的工作。其他的程序们ctest用于运行和报告测试结果的测试驱动程序,cpack用来生成安装程序和源包的打包程序,cmake-gui是 cmake 的图形界面,ccmake(注意ccmake比cmake多了一个c)也是用于图形界面,与cmake-gui不同的地方在于ccmake是基于控制台(terminal)的图形界面。

CMake是如何工作的?

CMake它依赖于系统中的其他工具来执行实际的编译、链接和其他任务。CMake好似一个在构建过程中工作的“协调器”,它清楚哪些步骤需要完成,理解最终目标是什么,以及忙碌于为构建工作找到合适的“工人”和“材料”。综上,这个过程有三个阶段:配置、生成、构建阶段,如下图所示。
在这里插入图片描述

CMake应用实例

初学者如何开始使用CMake呢?本文将通过一个个简单的CMake项目,由浅入深地,逐一介绍CMake的一些基本语法、命令和变量。

  project1
      ├── CMakeLists.txt
      └── test.cpp

如上所示,项目1包含2个文件:CMakeLists.txt用于描述项目构建步骤;test.cpp,c++源文件,具体内容如下:

  • CMakeLists.txt
    CMakeLists.txt 文件用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。一个最基本CMakeLists.txt 由3个命令组成,cmake_minimum_required指定cmake最小版本;project指定项目名称,版本等;add_executable指定生成的目标。
    cmake_minimum_required(VERSION 3.10)
    project(Test)
    add_executable(test test.cpp)
    
  • test.cpp
    #include <stdio.h>
    #include <math.h>
    int main(int argc, char **argv) {
        const int input_value = atoi(argv[1]);
        int square = input_value * input_value;
        printf("%d^2=%d\n", input_value, square);
        return 0;
    }
    
  • 项目配置和生成本地编译文件
    cd project1
    mkdir build
    cd build
    cmake ../
    
  • 项目编译
    cmake --build .
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CMake是一个跨平台的开源构建工具,它可以用于自动生成各种不同编译系统的构建文件(如Makefile、Visual Studio项目等),从而实现跨平台的代码构建CMake支持静态编译,即将所有依赖的库都链接到生成的可执行文件中,使得可执行文件在其他机器上运行时不再依赖外部的动态链接库。 在使用CMake进行静态编译时,可以通过设置CMake变量来指定静态编译的方式。其中,使用CMake的`-D`选项可以设置变量的值。对于静态编译,可以使用`-D BUILD_SHARED_LIBS=OFF`来禁用动态链接库的构建,同时使用`-D CMAKE_EXE_LINKER_FLAGS="-static"`来指定链接器使用静态链接。 下面是一个示例的CMakeLists.txt文件,展示了如何使用CMake进行静态编译: ```cmake cmake_minimum_required(VERSION 3.0) project(MyProject) # 设置编译类型为Release set(CMAKE_BUILD_TYPE "Release") # 禁用动态链接库的构建 set(BUILD_SHARED_LIBS OFF) # 设置链接器使用静态链接 set(CMAKE_EXE_LINKER_FLAGS "-static") # 添加源文件 add_executable(MyExecutable main.cpp) # 添加其他依赖库 target_link_libraries(MyExecutable PRIVATE library1 library2) ``` 在上述示例中,通过设置`BUILD_SHARED_LIBS`变量为`OFF`来禁用动态链接库的构建,通过设置`CMAKE_EXE_LINKER_FLAGS`变量为`-static`来指定链接器使用静态链接。然后,通过`add_executable`命令添加源文件,并通过`target_link_libraries`命令添加其他依赖库。 希望以上信息能够帮助到你!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RabinSong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值