cmake简单教程

1.背景介绍

以往在linux编译C++文件都采用make的方式,即用户自己编写makefile,makefile中定义了一些编译规则和依赖,然后用make指令进行编译,得到可执行文件。
  但是由于makefile的编写规则过于复杂,于是开发出一种新的简便的编译和管理工程的方式,即cmake。cmake的使用方式比较简单,即在当前文件夹下新建CMakeList.txt文件,这个文件也是定义编译规则和依赖的,但是书写简单。写完CMakeList.txt后,在当前文件夹使用cmake .,可以看到生成了一系列文件,其中就有makefile,之后再make,即生成可执行文件。
  原来,cmake即是在make的基础上,抛弃makefile,使用书写简单的CMakeList.txt,再用cmake .指令自动生成makefile,节省了编写makefile的时间。
  总结:makefile+make=CMakeList.txt+cmake .+make

2.一个简单案例

mkdir cmake_test
cd cmake_test
touch hello_world.cpp
# 此处写入hello_world.cpp内容,在下面
touch CMakeList.txt
# 此处写入CMakeList.txt的内容,在下面
cmake .
# 可以看到生成了包括makefile在内的许多东西
# 编译
make
# 可以看到生成了可执行文件helloworld_test
# 运行
./helloworld_test
# 终端有输出

附件1 hello_world.cpp

//hello_world.cpp
#include <iostream>
using  namespace std;

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

附件2 CMakeList.txt

//CMakeList.txt
project(helloworld) // 声明项目的名称

//add_executable(目标可执行文件名,需编译的cpp文件)
add_executable( helloworld_test hello_world.cpp ) //添加可执行权限

效果图1->cmake .后
在这里插入图片描述
效果图2->make后(多了可执行文件 helloworld_test)
在这里插入图片描述
效果图3->运行后
在这里插入图片描述

3.优化

由于cmake时会产生许多中间文件,乱七八糟不美观,因此希望把一些中间文件放到一个地方去,即build文件夹。然后在build文件里cmake点点,即对build上层的文件进行编译,这时所有的中间文件都会放在build文件夹里,然后再build里再make。

# 新建build文件夹
mkdir build
# 注意CMakeList.txt仍在根目录下,即build上层
# cmake .代表编译当前目录,cmake ..代表编译上层目录
cd build
cmake ..
# makefile在build下,因此仍在build下make
make
# 这次可执行文件生成在build下,运行可执行文件
./helloworld_test

图1 项目根目录下
在这里插入图片描述

图2 build文件夹下
在这里插入图片描述

4.包含库文件的cmake

有时我们的项目中需要依赖一些库,这时候怎么编写CMakeList.txt?
基本的之前都介绍过了,直接上操作。
(此时文件夹vscode_test中有build,main.cpp,CMakeList.txt)

# include里放库的头文件,src里放库的源文件
mkdir include src
touch include/hello.h src/hello.cpp
# 此处编写hello.h和hello.cpp,代码放在下面
# 此处编写CMakeList.txt,代码放在下面
cd build
cmake ..
make
# 可以看到可执行文件和库文件均在build下
./helloworld_test
//hello.h
#pragma once

void sayHello();
//hello.cpp
#include "hello.h"
#include <iostream>
using namespace std;

void sayHello(){
	cout<<"Hello World!"<<endl;
}
//main.cpp
#include "hello.h"
using namespace std;

int main(){
	sayHello();
	return 0;
}
#  CMakeList.txt
project(helloworld) // 声明项目的名称

# 说明include文件夹时存放引用头文件的地方
include_directories("include")

# add_library( 要生成的库文件名, 库的源代码)
# 生成库文件
add_library( libHello src/hello.cpp )

# add_executable(目标可执行文件名,需编译的cpp文件)
# 添加可执行权限
add_executable( helloworld_test main.cpp )

# 因为helloworld_test里面调用了libhello这个库,因此要将他们链接上
# target_link_libraries( 目标可执行文件名,依赖的库文件名 )
target_link_libraries(  helloworld_test libHello )

# 注意,这其中我们只关心源文件,因为头文件的依赖关系是cmake帮我们处理的。

参考视频:b站教程 1:13:00之后开始讲解cmake

一个很好的教程:Cmake入门教程配套源码Github地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值