代码链接

CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。

一 安装CMake

sudo apt install cmake
cmake -version
cmake version 3.17.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).

二 简单样例

首先让我们从最简单的代码入手,先来体验下cmake是如何操作的。编写main.c,如下,

#include <stdio.h>int main(void)
{printf("Hello World\n");return 0;
}

然后在main.c相同目录下编写CMakeLists.txt,内容如下,

cmake_minimum_required (VERSION 2.8)project (demo)add_executable(main main.c)
  • 第一行意思是表示cmake的最低版本要求是2.8,我们安装的是3.10.2;
  • 第二行是表示本工程信息,也就是工程名叫demo;
  • 第三行比较关键,表示最终要生成的elf文件的名字叫main,使用的源文件是main.c
  • 在终端下切到main.c所在的目录下,然后输入以下命令运行
mkdir build
cd build
cmake  ..
make

Linux下CMake简明教程(一)简单入门相关推荐

  1. Linux下CMake简明教程(二)同一目录下多个源文件

    代码在git 接下来进入稍微复杂的例子:在同一个目录下有多个源文件.在之前的目录下添加2个文件,testFunc.c和testFunc.h.添加完后整体文件结构如下, (base) ledi@ledi ...

  2. Linux下CMake简明教程(八) 添加编译选项

    代码在git 有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,就可以使用add_compile_options来进行操作. 这里以一个简单程序来做演示,main.cpp如下 # ...

  3. Linux下CMake简明教程(七)对库进行链接

    代码在git 既然我们已经生成了库,那么就进行链接测试下.重新建一个工程目录,然后把上节生成的库拷贝过来,然后在在工程目录下新建src目录和bin目录,在src目录下添加一个main.c,整体结构如下 ...

  4. Linux下CMake简明教程

    CMake是开源.跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿 ...

  5. Linux下CMake简明教程(10) 定义宏来控制打印的信息

    代码在git 假设我们有个main.c,其内容如下 #include <stdio.h>int main(void) {#ifdef WWW1printf("hello worl ...

  6. Linux下CMake简明教程(九) 添加控制选项

    代码在git 有时希望在编译代码时只编译一些指定的源码,可以使用cmake的option命令,主要遇到的情况分为2种: 本来要生成多个bin或库文件,现在只想生成部分指定的bin或库文件 对于同一个b ...

  7. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

  8. Linux下CMake简明教程(五)正规一点的组织结构

    代码在git 正规一点来说,一般会把源文件放到src目录下,把头文件放入到include文件下,生成的对象文件放入到build目录下,最终输出的elf文件会放到bin目录下,这样整个结构更加清晰.让我 ...

  9. Linux下CMake简明教程(四)不同目录下多个源文件

    代码在git 一般来说,当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这样方便查找.那么这种情况下如何编写CMakeLists.txt呢? 我们把之前的源文件整理一下(新建2 ...

最新文章

  1. 【Go】Go基础(五):函数
  2. Python入门基础知识学什么?
  3. Linux系统文件编程(1)
  4. 初学echart的简单使用
  5. 测试python第二周_python第二周作业
  6. React:创建用于获取数据的自定义Hook
  7. PHP代码更新后画面不更新,为什么我的PHP代码不能更新SQL
  8. Javaweb家政服务管理系统的设计与实现
  9. flash基础动画制作
  10. 美军与敏捷领导力—八个改变工作方式世界的老兵
  11. 16岁的雅虎问答,因“不再受欢迎”将永久关闭
  12. 汉诺塔游戏c语言作业,C语言实现汉诺塔游戏.pdf
  13. [附源码]计算机毕业设计JAVA濒危物种科普系统
  14. 框架的优缺点(TP CI)
  15. 微信小程序开始时间,结束时间
  16. VC2008 NewControl 示例
  17. MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
  18. C#使用EmguCV库介绍(一)
  19. MySQL基础知识,如果有疏漏、错误的地方请大家指出
  20. 《如何五分钟创建自己的新币token 》Dapp开发 Web3+以太坊+智能合约开发 (一)

热门文章

  1. 六自由度高超声速飞行器的建模与控制器设计
  2. 二十、SPI设备驱动及应用(一)
  3. C#当中的BeginInvoke和EndInvoke
  4. POJ-1201 Intervals---差分约束
  5. TSC的分歧导致Node.js分支
  6. 异步加载 防止图片混乱
  7. 过滤“清扬男士”Flash广告
  8. Android 音频播放——AudioTrack直接播PCM、MediaPlayer播媒体文件可以是audio
  9. wsl安装配置vscode(亲测有用)
  10. win10安装和配置Maven3.6.3