01简单的CMakeLists.txt示例

CMakeLists.txt 基础

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

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

一、最简单的CMakeLists.txt

1、CMake的注释

1.1 行注释

CMake 使用 # 进行行注释

# 这是一个 CMakeLists.txt 文件
cmake_minimum_required(VERSION 3.1.0)

1.2 块注释

CMake 使用 #[[ ]] 进行块注释

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

2、cmake_minimum_required

cmake_minimum_required:指定使用的 cmake 的最低版本。

用法:cmake_minimum_required(最低版本号)

举例:

cmake_minimum_required(VERSION 3.10)
#[[
    "3.10" 是 CMake 的最低版本号。这一行代码告诉 CMake 最低所需的版本号,CMake 会检查你所使用的 CMake 版本是否		满足最低要求。如果你的 CMake 版本低于指定的版本,那么 CMake 将停止构建并给出错误信息
]]

3、project

project:定义工程名称,并可指定工程的版本、工程描述,如果不需要是可以忽略的,只需要指定出工程名字即可。

用法:project(工程名称)

举例:

cmake_minimum_required(VERSION 3.10)
project(app)

project(app) 是 CMake 的一个指令,用于定义项目的名称。在这里,app 是项目的名称,你可以根据需要修改为你实际的项目名称。

通过使用 project 指令,你可以告诉 CMake 构建系统关于你的项目的一些基本信息,例如项目的名称、版本号、支持的语言等。这些信息对于 CMake 在生成构建文件时非常重要。

实际上,project 指令还可以带上其他可选参数,可以更详细地指定项目的属性,例如:

project(app
        VERSION 1.0
        DESCRIPTION "A sample CMake project"
        LANGUAGES CXX)

这里,我们除了指定项目的名称为 app 外,还指定了项目的版本号、描述和所使用的编程语言(在此示例中是 C++)。这些信息可以作为元数据用于构建生成的项目文件和工程文件。

请注意,在一个 CMakeLists.txt 文件中只能出现一次 project 指令,用于定义项目的主要信息。如果你的项目包含多个子目录或子项目,可以在每个子目录的 CMakeLists.txt 文件中使用 project 指令来定义子项目的信息。

4、add_executable()

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

用法1:add_executable(可执行程序名 源文件1名称 源文件2名称 源文件3名称)

用法2: add_executable(可执行程序名 源文件1名称;源文件2名称;源文件3名称)

举例:

cmake_minimum_required(VERSION 3.10) 
project(app)
add_executable(app add.c sub.c div.c mult.c main.c) 
#注意这里的可执行程序名和project中的项目名没有任何关系

5、简单的CMakeLists.txt示例

在这里我们使用具体文件做示例:

5.1 编写文件 add.c sub.c mult.c div.c head.h main.c CMakeLists.txt

add.c

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

const char* libVersion = "Library Version 1.0";

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

}

sub.c

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

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

}

mult.c

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


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

}

div.c

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



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

}

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);

double divide(int a,int b);


#endif

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(app) 
add_executable(app add.c sub.c div.c mult.c main.c) 

目录结构如下:

在这里插入图片描述

5.2执行cmake

cmake ./
make

执行过程如下:

在这里插入图片描述

此时目录下生成很多文件,可以看到一个Makefile

在这里插入图片描述

执行make生成app

在这里插入图片描述

此时已成功编译出可执行文件app

6、将目标文件放进文件夹的CMakeList.txt

通过上面的例子可以看出,如果在CMakeLists.txt文件所在目录执行了cmake命令之后就会生成一些目录和文件(包括 makefile 文件),如果基于makefile文件执行make命令,程序在编译过程中还会生成一些中间文件和一个可执行文件,这样会导致整个项目目录看起来很混乱,不太容易管理和维护,此时我们就可以把生成的这些与项目源码无关的文件统一放到一个对应的目录里边,比如将这个目录命名为build:

继续使用以上的源文件进行测试:

mkdir build
cd build
cmake ../
make

过程如下,可以看到所有的cmake过程文件都生成在build的文件夹中了,这样使顶层目录更加整洁:

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MrWang.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值