Cmake入门

本文详细介绍使用CMake构建C++项目的三种常见场景:单文件项目、单目录多文件项目及多目录项目。涵盖CMakeLists.txt配置、目标生成、源文件搜索、目录包含、子目录添加及库链接等核心概念。

1.单文件

    main.cpp文件

#include <iostream>
using namespace std;
int a = 1;
int main() {
    int b = 2;
    int c = b + a;
    cout<<c<<endl;
    return 0;
}

同一目录下的CMakeFiles文件

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (pp)

# 指定生成目标
add_executable(ppout main.cpp)

然后执行cmake .命令,再执行make命令,我们就可以得到目标文件ppout执行文件,如果我们想要修改CMakeLists文件,我们不需要再执行cmake .,我们改完之后直接执行make就行

 

2. 单目录多文件

目录结构:

main.cpp:

#include <iostream>
#include "source.h"
using namespace std;
int main()
{
    int a = 1;
    cout<<a<<endl;
    f();
    return 0;
}

source.cpp:

#include<iostream>
#include"source.h"
using namespace std;
void f()
{
    cout<<"hello"<<endl;
}

source.h:

#ifndef SOURCE
#define SOURCE

void f();
class Box{

};
#endif

CMakeLists文件:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (pp2)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(out ${DIR_SRCS})

这里我们并没有像单目录下,指定生成目标后面跟个文件名,当然我们也可以用.cpp文件名加空格的形式来编写,不过这种方式可以帮我们直接扫描我们所设定的目录下的文件名,并且保存在某个变量下,这样我们引用了这个变量,相当于引用了目录下的文件名,不过主目录下一般只有一个main.cpp文件加其他要引用的文件。

 

3.多文件,多目录

目录结构:

math/CMakeLists.txt:

aux_source_directory(. DIR_HELLO_SRCS)
add_library(MATH ${DIR_HELLO_SRCS})

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(pp3)

# Add the source in project root directory
aux_source_directory(. DIRSRCS)

# Add header file include directories
include_directories(./ ./math)

# Add block directories
add_subdirectory(math)

# Target
add_executable(helloworld ${DIRSRCS})

target_link_libraries(helloworld MATH)

source.h,source.cpp,main.cpp保持不变

这里我们可以看出,和样例2相比,多了3个函数,第一个include_directories,这个函数的作用是例如我们的main.cpp要include某个目录下的某个文件,我们要#include "文件的详细路径",但是我们一般只想#icnlude "文件名",这时候我们就可以用这个语句,先把他的路径给include了,这样我们main.cpp在导入这个文件的时候就不需要加上详细的文件目录名了,第二个是add_subdirectory,第一个函数只是在导入名字上省略而已,如果我们真想要导入某个目录的文件,我们还是需要add_subdirectory(目录名),第三个是target_link_libraries(),这个函数的作用是见目标文件和库文件进行链接,我们都知道C++编译的时候就是把一个个文件链接起来,最后生成一个可执行文件,这个函数做的就是这一步。

CMake是一个跨平台的开源构建系统,它帮助开发者在多种操作系统上自动化软件项目的构建过程。以下是CMake入门的一些步骤和基本概念: 1. **安装CMake**:首先,你需要从CMake官网下载并安装适用于你的系统的版本。对于Windows、Mac OS和Linux都有预打包的二进制包可供选择。 2. **创建CMakeLists.txt**:这是CMake的核心,它是描述你的项目结构和依赖关系的文本文件。通常放在项目根目录下。 3. **配置生成器**:CMake支持多种构建系统,如Unix Makefiles、Visual Studio等。通过命令行指定`cmake -G`选项,告诉CMake你想要哪种生成器。 4. **生成构建文件**:运行`cmake`命令初始化CMake流程,生成对应的构建文件(如Makefile或Visual Studio解决方案文件)。 5. **构建项目**:根据选定的构建系统(如make或msbuild),运行`make`或`cmake --build .`命令来实际构建你的程序。 6. **添加变量和指令**:CMake提供了许多变量和函数,如设置源代码路径、添加库依赖、设置编译选项等,可以灵活调整构建配置。 7. **了解基本语法**:学习CMake的基本语法,如IF()条件语句、ADD_EXECUTABLE()添加可执行文件、INCLUDE()导入外部CMakeLists.txt等。 8. **实践项目**:通过参与一些小型项目或者使用官方的示例来熟悉CMake的工作流程。 **相关问题--** 1. CMake有哪些常见的错误及其解决办法是什么? 2. 如何在CMakeLists.txt中处理不同平台的差异? 3. 怎样在已经存在的CMake项目中添加新的模块或依赖?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值