【C++】Cmake入门|掌握cmake的基本操作

前言:
在这里插入图片描述
CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。

本文主要讲述在Linux下如何使用CMake来编译我们的程序。

  • CmakeLists.txt->makefile->make就可以了,使用Cmake自动生成makefile
  • Cmake可以生成可执行文件,也可以生成库文件(动态库、静态库等)

1.cmake的环境搭建

使用的是ubuntu18.04,安装cmake使用如下命令:

sudo apt install cmake

安装完成后,在终端下输入:

cmake -version
%查看cmake的版本

1.1 cmake的demo

首先让我们从最简单的代码入手,来体验下cmake是如何操作的。
add.cc

#include "head.hpp"
int add(int a, int b)
{
   
   
    return a + b;
}

head.hpp

#pragma once
int add(int a, int b);

main.cc

#include <iostream>
#include "head.hpp"
int main()
{
   
   
    int a = 10;
    int b = 20;
    std::cout << add(a, b) << std::endl;
    return 0;
}

在这里插入图片描述
在main.c的同级目录下,创建一个CMakeLists.txt,内容如下:
CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (demo)
add_executable(main main.c)

解释:

  • 第一句是指定要使用的cmake的最低版本,如果本地的cmake版本不符合要求,就不能完成cmake编译,这个可以不写,但是写上是一个良好的习惯,避免一些潜在问题。
  • 第二句就是项目的名字,定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。
# PROJECT 指令的语法是:
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
       [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
       [DESCRIPTION <project-description-string>]
       [HOMEPAGE_URL <url-string>]
       [LANGUAGES <language-name>...])

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

add_executable(可执行程序名 源文件名称)
%中间可以用空格分开,也可以用;来分开

使用cmake编译:

在终端下切到main.c所在的目录下,然后输入以下命令运行cmake:

cmake .

可以看到在目录下,生成的文件有哪些?

在当前目录下面用cmake编译,所有东西包括可执行,都会堆到一个目录下,很乱,所以我们一般现在当前目录下创建一个build目录,然后在里面cmake…

1.2 编译多个源文件

1.2.1 在同一个目录下有多个源文件

在这里插入图片描述
首先删除之前的文件:

rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile main
%在之前的目录下添加2个文件,testFunc.c和testFunc.h
touch testFunc.c testFunc.h

testFunc.c

#include <stdio.h>
#include "testFunc.h"
void func(int data)
{
   
   
	printf("data is %d\n", data);
}

testFunc.h

#ifndef _TEST_FUNC_H_
#define _TEST_FUNC_H_
void func(int data);
#endif

main.c

#include <stdio.h>
#include "testFunc.h"
int main(void)
{
   
   
	func(100);
	return 0;
}

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (demo)
add_executable(main main.c testFunc.c)
%修改CMakeLists.txt,在add_executable的参数里把testFunc.c加进来

运行查看:

cmake .
make

注意:

  • 可以类推,如果在同一目录下有多个源文件,只要在add_executable里把所有源文件都添加进去就可以了

但是如果有一百个源文件,再这样做就有点坑了,无法体现cmake的优越性。
因此cmake提供了一个命令,可以把指定目录下所有的源文件存储在一个变量中,这个命令就是
aux_source_directory(dir var)
参数1:dir是指定目录,
参数2:var是用于存放源文件列表的变量。

接下来写个进阶版的demo使用一下这个变量。
进阶版本CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (demo)
%使用aux_source_directory把当前目录下的源文件存列表存放到变量SRC_LIST里
aux_source_directory(. SRC_LIST)
add_executable(main ${
   
   SRC_LIST})

aux_source_directory()也存在弊端,它会把指定目录下的所有源文件都加进来,可能会加入一些我们不需要的文件,此时我们可以使用set命令去新建变量来存放需要的源文件,如下:

cmake_minimum_required (VERSION 2.8)
project (demo)
set( SRC_LIST
	 ./main.c
	 ./testFunc1.c
	 ./testFunc.c)
add_executable(main ${
   
   SRC_LIST})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值