20分钟入门 - CMake教程

本文章只提供快速入门教程,旨在帮助新手们(包括我自己)快速入门一个相关知识,不包含详细的知识点以及高级的技术用法。如有需要,可自行查找更加详细的资料。

安装

使用以下命令安装CMake

sudo apt install cmake

成功安装后,输入下面命令检查是否正确安装,正确安装应该会显示cmake的版本号

cmake --version

准备

新建一个测试文件main.cpp
在这里插入图片描述为测试程序新建一个CMakeLists.txt
在这里插入图片描述

最简单的程序

main.cpp中编写一个Hello World程序

#include <iostream>

using namespace::std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

编辑CMakeLists.tx

# 01. 声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )

# 02. 添加c++11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )

# 03. 声明一个cmake工程
PROJECT(cmake_test)

# 99. 可执行文件生成
add_executable(${PROJECT_NAME} main.cpp)

来了,准备见证神奇的一刻,在CMakeLists.txt所在的路径下,执行

cmake .		# 注意这里有一个 "." 表示cmake的路径

在这里插入图片描述等待执行成功后,再查看路径下的文件,
在这里插入图片描述可见cmake生成了几个文件,包括Makefile,这里我们不管这些,需要深入的同学自己再查资料。

现在我们再make一下:
在这里插入图片描述make完成后,就会出现我们需要的cmake_test可执行文件,现在执行一下./cmake_test:
在这里插入图片描述Hello World! 这难道不是世界上写得最多的程序么?

不过20分钟还没够哦,再学一点吧。

增加头文件搜索路径

有时候因为程序会很大,包含很多源文件和头文件,我们会对这些文件分类管理,组织一个比较清晰的文件目录,例如:
在这里插入图片描述如图,增加了一个sub_file_a模块,其中源文件放在/src中,头文件放在/inc中, 他们的内容分别为:

// 源文件
#include "sub_file_a.h"
#include <iostream>
using namespace::std;

int print_AAA()
{
    cout << "AAA" << endl;
    return 0;
}
#ifndef SUB_FILE_A_H
#define SUB_FILE_A_H

int print_AAA();

#endif

修改main.cpp让其调用sub_file_a模块的print_AAA函数,打印AAA

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

using namespace::std;

int main()
{
    cout << "Hello World!" << endl;
    print_AAA();
    return 0;
}

最重要的一步,修改CMakeLists.txt,为其添加头文件的搜索路径,以及需要编译的C++源文件:

# 01. 声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )

# 02. 添加c++11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )

# 03. 声明一个cmake工程
PROJECT(cmake_test)

# 4. 头文件
include_directories(
${PROJECT_SOURCE_DIR}/inc											# 这里添加头文件路径
)

# 99. 可执行文件生成
add_executable(${PROJECT_NAME} main.cpp src/sub_file_a.cpp)			# 这里添加新增的需要编译的源文件

然后同样cmake .一下:
在这里插入图片描述
然后在make
在这里插入图片描述编译没有报错,然后执行生成的二进制文件:
在这里插入图片描述AAA也打印出来了。

我有很多个源文件

按照上面的做法,当我在开发这个Hello World程序的时候,如果我想在新增几个个print_???的模块,我除了写好对应模块的程序外,还要在CMakeLists.txt添加需要编译的源文件。每次新增模块,我都要改一下CMakeLists.txt,那我岂不是很傻逼?如果我有100个模块,1000个模块,那我要添加100个,1000个源文件,那我岂不是更傻逼?当然不能够这样做。正确的做法是在CMakeLists.txt增加源文件列表。

例如,现在我的目录是这样的:
在这里插入图片描述
其中新增了一个模块sub_file_b用于打印 “BBB”, 现在修改CMakeLists.txt

# 01. 声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )

# 02. 添加c++11标准支持
set( CMAKE_CXX_FLAGS "-std=c++11" )

# 03. 声明一个cmake工程
PROJECT(cmake_test)

# 4. 头文件
include_directories(
${PROJECT_SOURCE_DIR}/inc
)

# 98 通过aux_source_directory遍历"./src"目录下的所有源文件,保存为SRC_LIST
aux_source_directory(./src SRC_LIST)

# 99. 可执行文件生成
add_executable(${PROJECT_NAME} main.cpp ${SRC_LIST})

这样cmake就会去./src目录找需要编译的源文件。

最后再修改main.cpp:

#include <iostream>
#include "sub_file_a.h"
#include "sub_file_b.h"

using namespace::std;

int main()
{
    cout << "Hello World!" << endl;
    print_AAA();
    print_BBB();
    return 0;
}

然后cmake .make一下,执行可执行文件:
在这里插入图片描述完美。

20分钟应该够了,其他跟高级的CMake用法,同学们可以继续查相关的资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值