CMake简单使用

这篇博客介绍了CMake的基本使用,包括如何创建简单的"Hello World"项目,处理多个源文件,以及在编译时添加选项。CMake作为一个跨平台的自动化构建系统,能生成可移植的makefile,简化了手动编写makefile的工作。通过实例演示了CMakeLists.txt的编写和编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是CMake?

大家都知道makefile就是用来管理代码自动化编译的工具,而cmake就是makefile的上层工具,目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。cmake能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake.

一.首先我们来编写一个“Hello World”文件熟悉一下CMake的使用.

1.首先建立一个test目录,在test目录下建立一个文件名为Hello.cpp的文件,并输入下列代码.

**deepin 15.7 下cmake的安装命令为sudo apt-get install cmake **

#include <iostream>

using namespace std;

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

    return 0;
}
2.在test目录下建立一个新的文件CMakeLists.txt,其中输入的内容就是Cmake的执行代码.
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) //Cmake最低版本需求,不加入此行会受到警告信息

PROJECT(test)  //项目名称

AUX_SOURCE_DIRECTORY(. SRC_LIST) //把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST

//AUX_SOURCE_DIRECTORY(<dir> <variable>)函数接受两个参数,收集指定目录中所有源文件的名称,并将列表存储在提供
//的<variable>中.

ADD_EXECUTABLE(Hello ${SRC_LIST}) //自动生成可执行文件Hello,ADD函数将所有源代码文件进行编译
**3.编译项目.
为了使用外部编译方式编译项目,需要先在test目录下新建一个目录,一般命名为build.然后切换到build目录,执行命令cmake ..因为上层目录是源文件,所以用...然后执行make,就会生成可执行文件Hello.执行后结果如下:**

在这里插入图片描述

如果想要删除cmake生成的文件,可以直接删除build目录,下次编译时再在项目下创建build目录,然后编译就行.

二.多个源文件Cmake的编写.

同一目录下多个源文件
1.在原来的test目录下建立一个Hello.h文件.
#include <iostream>

using namespace std;

void hello() {

    cout << "Hello world!" << endl;
}
2.将Hello.cpp改为:
#include <iostream>
#include "Hello.h"

int main()
{
    hello();
    return 0;

}
原本的CMakeLists.txt文件不变,删除cbuild目录,新建build目录,执行cmake ..,然后执行make,执行elf文件.

在这里插入图片描述

AUX_SOURCE_DIRECTORY(. SRC_LIST) 这句语法就将当前目录下的所有源代码文件和头文件加入变量SRC_LIST.//把当前目录(.)下所有源代码文件和头文件加入变量SRC_LIST,
不同目录下的多个源文件

在这里插入图片描述

程序结构如上图,代码如下:
Hello.h:
#include <iostream>

using namespace std;

void Hello();
//
Hello.cpp:
#include "Hello.h"

void Hello() {

    cout << "Hello" << endl;
}
//
World.h:
#include <iostream>

using namespace std;

void World(); 
//
World.cpp:
#include "World.h"

void World() {

    cout << "World!" << endl;
}
//
CMakeLists.txt文件如下:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #Cmake最低版本需求,不加入此行会受到警告信息

PROJECT(test)  #项目名称

INCLUDE_DIRECTORIES(Hello World)

AUX_SOURCE_DIRECTORY(. SRC_LIST)
AUX_SOURCE_DIRECTORY(Hello SRC_LIST1)
AUX_SOURCE_DIRECTORY(World SRC_LIST2)

ADD_EXECUTABLE(main ${SRC_LIST} ${SRC_LIST1} ${SRC_LIST2})

INCLUDE_DIRECTORIES函数将给定目录添加到编译器用于搜索包含文件的目录中。相对路径被解释为相对于当前源目录。

在这里插入图片描述

其实更加标准一点的写法,会将源文件全部存储在src目录下,所有的头文件放在include目录下。项目的结构如下:

在这里插入图片描述

** CMakeLists.txt文件如下:**
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #Cmake最低版本需求,不加入此行会受到警告信息

PROJECT(test)  #项目名称

INCLUDE_DIRECTORIES(include)

AUX_SOURCE_DIRECTORY(src SRC_LIST)

ADD_EXECUTABLE(main ${SRC_LIST})

三.在编译时加入其他选项.

添加编译选项用add_compile_options函数,直接在括号中添加选项。
支持gdb调试:
在CMakeLists.txt文件中加入:
set(CMAKE_BUILD_TYPE "Debug")

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值