CMake的使用

一、CMake概述

CMake是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile (通过make命令进行项目的构建),大多是IDE软件都集成了make,比如: VS的nmake、linux下的GNU make、Qt的qmake等,如果自己动手写makefile,会发现makefile 通常依赖于当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。

而CMake恰好能解决上述问题,其允许开发者指定整个工程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需make 编译即可,所以可以把CMake看成一款自动生成Makefile的工具,其编译流程如下图:

在这里插入图片描述

蓝色虚线表示使用makefile构建项目的过程

红色实线表示使用cmake构建项目的过程

介绍完CMake的作用之后,再来总结一下它的优点:
跨平台
能够管理大型项目
简化编译构建过程和编译过程
可扩展:可以为cmake 编写特定功能的模块,扩充 cmake功能

二、CMake的使用

CMake支持大写、小写、混合大小写的命令。如果在编写CHakeLists.txt 文件时使用的工具有对应的命令提示,那么大小写随缘即可,不要太过在意。

1.注释

CMake使用#进行行注释,可以放在任何位置。

#这是一个CMakeLists.txt 文件
cmake_minmum_required(VERSION 3.0.0)

CMake使用#[[]]形式进行块注释。

#[[这是一个CMakeLists.txt 文件
这是一个CMakeLists.txt 文件
这是一个CMakeLists.txt 文件]]
cmake_minmum_required(VERSION 3.0.0)

2.简单编译程序

1.测试源文件

1.head.h

#ifndef _HEAD_H
#define _HEAD_H

int add(int a,int b);
int subtract(int a,int b);
int multiply(int a,int b);
int divide(int a,int b);

#endif

2.add.cc

#include "head.h"

int add(int a,int b)
{
   
   
    return a + b;
}

3.subtract.cc

#include "head.h"

int subtract(int a,int b)
{
    return a - b;
}

4.multiply.cc

#include "head.h"

int multiply(int a,int b)
{
    return a * b;
}

5.divide.cc

#include "head.h"

int divide(int a,int b)
{
   
   
    return (double)a / b;
}

6.main.cc

#include "head.h"
#include <iostream>

int main()
{
   
   
    int a = 20,b = 12;
    std::cout << "a = " << a << " b = " << b << std::endl;
    std::cout << "a + b = " << add(a,b) << std::endl;
    std::cout << "a - b = " << subtract(a,b) << std::endl;
    std::cout << "a * b = " << multiply(a,b) << std::endl;
    std::cout << "a / b = " << divide(a,b) << std::endl;
    return 0;
}

上述代码的目录结构树如下:

-- v1
    |-- add.cc
    |-- divide.cc
    |-- head.h
    |-- main.cc
    |-- multiply.cc
    `-- subtract.cc

我们可以使用如下指令进行编译:

g++ *.cc -o main

2…添加CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(CALC)
add_executable(main main.cc add.cc subtract.cc multiply.cc divide.cc)

cmake_minimum_required:指定使用的cmake的最低版本(可选,非必选,如果不加可能会有警告)

project:定义过程名称,并可指定工程的版本,工程描述,web主页地址,支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出过程的名字即可。

project指令的语法格式如下:

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAHE>
		[VERSION <major>[.<minor>[.<patch>[.ctweak>]]]]
		[DESCRIPTION <project-description-string>]
		[HONEPAGE_URL <url-string>]
		[LANGUAGES <language-name> ...])

add_executable :定义工程会生成一个可执行程序

add_executable(可执行程序名  源文件名称)

这里的可执行程序名和project中的项目名没有任何关系

源文件名可以是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

椿融雪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值