cmake与make的项目构建快速上手

简介

cmake工具可以生成makefile文件,makefile文件可以指定一个项目中那些文件需要编译,哪些文件不需要编译,在项目开发中十分重要。

前述知识——C程序编译的过程

  • 预编译

    将.c/.h文件预编译为.i文件,具体地,将.c中的头文件和库文件导入进来;进行宏定义的替换

  • 汇编

    将.i文件转换为.S文件(汇编)

  • 编译

    将.S转换为.o文件(obj二进制文件)

  • 链接

    将.o文件转换为.exe可执行文件(linux中的.elf)

一般的IDE自动完成.c到.exe中间变量的配置,如果自己构建makefile文件,用.c文件生成.exe文件,可以参考如下命令

# eg:用.c获取.exe文件(最简单的编译)
hello.i:hello.c
	gcc -E hello.c -o hello.i
hello.S:hello.i
	gcc -S hello.i -o hello.S
hello.o:hello.S
	gcc -c hello.S -o hello.o
hello:hello.o
	gcc hello.o -o hello

开发环境

  • window10
  • cmake 3.22.2
  • GUN Make 3.82.90

环境配置教程和学习教程

建议:按照顺序学习

cmake特点

  • 跨平台——平台无关
  • 大小写无关

CMake语法介绍

PROJECT

  • 设置项目名——PROJECT

  • PROJECT(HELLO C CXX)为项目名为HELLO,支持c,c++语言

SET

  • 设置变量——SET

  • SET(SRC_LIST main.cpp test.cpp)

MESSAGE

  • 设置消息——MESSAGE

  • MESSAGE(STATUS "THIS IS MY DIR" ${HELLO_BINART_DIR})

ADD_EXECUTABLE

  • 生成可执行文件——ADD_EXECUTABLE

  • ADD_EXECUTABLE(HELLO ${SRC_LIST})ADD_EXECUTABLE(HELLO main.cpp)

ADD_SUBDIRECTORY

  • ADD_SUBDIRECTORY添加子目录,可以指定中间二进制和目标二进制的存放位置

  • ```ADD_SUBDIRECTORY(src bin)``

    将src子目录加入工程并指定编译输出(包含中间编译结果),路径为bin目录

    如果不指定bin的话,那么编译结果都将放在bulid/src目录下

变量之间可以用空格来分割,也可以用分号来分割

Makefile快速上手

  • 单文件构建项目

    # eg:用.c获取.exe文件(最简单的编译)
    hello:hello.o
    	gcc hello.o -o hello
    hello.i:hello.c
    	gcc -E hello.c -o hello.i
    hello.S:hello.i
    	gcc -S hello.i -o hello.S
    hello.o:hello.S
    	gcc -c hello.S -o hello.o
    

需要注意是:

  • .’.PHONY:’——伪目标,执行额外的命令

    .PHONY:
    # 删除所有文件
    clearall:
    	rm -rf hello.i hello.S hello.o hello
     # 删除过程文件
    clear:
    	rm -rf hello.S hello.i
    

    调用方式(DOS命令):

    # 删除所有文件
    make clearall
    # 删除过程文件
    make clear
    

快速上手

image-20220129130426012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zeeland

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

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

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

打赏作者

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

抵扣说明:

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

余额充值