CMake快速入门

介绍

之前讲的Makefile的配置跟你当前的系统非常强的相关,例如在Linux或苹果下配置完Makefile,放到Windows下就会有问题,因为编译器会不同、路径会不同等。

如果要做跨平台的软件,要给不同的操作系统,不同的编译环境里写不同的Makefile,这非常繁琐。

这里还是以之前Makefile的例子进行介绍。

一共有四个源程序:main.cpp,printhello.cpp,factorial.cpp,functions.h

首先是main.cpp内容

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

using namespace std;

int main()
{
    printhello();

    cout << "This is main:" << endl;
    cout << "The factorial of 5 is: " << factorial(5) << endl;
    return 0;
}

调用两个函数

printhello.cpp内容

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

using namespace std;

void printhello()
{
    int i;
    cout << "Hello World!" << endl;
}

定义了一个函数,输出hello

factorial.cpp内容

#include"functionals.h"

int factorial(int n)
{
    if(n == 0 || n == 1){
        return 1;
    }
    else{
        return n * factorial(n - 1);
    }
}

定义了一个函数,用于计算阶乘

functions.h内容

#ifndef _FUNCTIONALS_H_
#define _FUNCITIONALS_H_
void printhello();
int factorial(int n);
#endif

在这个文件里写了函数的声明

CMake

首先需要一个CMakeLists.txt,这是CMake的配置文件

第一行是最小支持什么版本,如果用到了CMake高级特性,就要按直接的版本。

第二行是项目名

第三行是在project里加上可执行的hello程序,hello程序依赖后面三个cpp

cmake_minimum_required(VERSION 3.10)

# set the project name
project(hello)

# add the executable
add_executable(hello main.cpp factorial.cpp printhello.cpp)

然后在命令行运行cmake .,cmake就会在当前目录下找CMakeLists.txt

CMake会找你的C语言编译器是什么,C++编译器是什么,查一查C语言编译器的编译选项,C++编译器的编译选项,最后是配置查询完毕,生成完毕,生成一系列文件:CMakeCache.txt,目录CMakeFiles,Makefile文件

这就是我们用CMake的目的,让CMake帮我们生成Makefile

然后我们可以用make使用CMake生成的Makefile(注意:路径不能有中文,不然生成的Makefile没法make编译,这时要修改好路径名,删掉所有生成的临时文件,重新cmake生成)

但是产生了一堆临时文件,如果想把这些删掉很麻烦。

一个简单的方法就是,创建一个目录build,进入build目录,再用命令cmake ..,所有的一切都在build目录里生成,这样删除就很方便,直接删除build目录,这就是为什么很多软件在用cmake编译前创建一个build目录

注意:Windows下会报错

加上-G "MinGW Makefiles",例如最后这里将命令改成cmake .. -G "MinGW Makefiles"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值