CMake 教程一

本文主要内容如下:
  1. 使用cmake将单个C++文件,编译为可执行文件

  2. 对比cmake 编译为DEBUG版本和RELEASE版本的区别 (文件的执行效率,以及文件大小)


1. c++ 执行1亿次count,然后输出count结果, 以及耗时毫秒数

主要代码如下:

std::cout << "Hello, World!" << std::endl;
int count = 1;

const int MAX_LOOP = 10000 * 10000;
std::chrono::steady_clock::time_point beg = std::chrono::steady_clock::now();

for (int i = 0; i < MAX_LOOP; ++i) {
    ++count;
}

std::chrono::steady_clock::time_point end= std::chrono::steady_clock::now();
std::cout<<"after loop count is: "<<count<<std::endl;

std::cout <<" Time difference = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() <<std::endl;
cmake_minimum_required(VERSION 3.5)
project(demo1)
set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(demo1 ${SOURCE_FILES})

cmake 默认的是把程序编译为RELEASE版本,下面我们显示的给出DEBUG版本

这里写图片描述

我们可以看到执行一亿次耗时 194 ms, 文件大小大概45 KB。

我们在看下RELEASE模式下:

这里写图片描述

可以看到耗时,低于 1 ms,而且文件大小只有9.2 KB。

我们可以在CMakeLists.txt添加如下行,查看cmake默认的编译模式:

message("default build type is ${CMAKE_BUILD_TYPE}")

这里写图片描述

可以看到默认的模式是RELEASE。

当然我们也可以在CMakeList.txt设置模式:

message("default build type is ${CMAKE_BUILD_TYPE}")
set(CMAKE_BUILD_TYPE DEBUG)
message("after set, build type is ${CMAKE_BUILD_TYPE}")

更多关于CMAKE_CXX_FLAGS可见 stackoverflow

CMake个跨平台的开源构建系统,用于管理软件构建过程。它能够生成标准的构建文件(如 Makefile 或者 Visual Studio 项目文件),并且支持多种编译器和操作系统。CMake 通过 `CMakeLists.txt` 文件来描述项目的构建结构,这使得项目可以轻松地在不同的平台上进行构建。 ### 基本概念 - **CMakeLists.txt**: 每个 CMake 项目都需要至少个 `CMakeLists.txt` 文件,该文件定义了项目的源代码、目标文件以及依赖关系。 - **构建目录**: 推荐创建个独立的构建目录(例如 `build`),与源代码分离,以便清理或重新构建。 - **配置步骤**: 使用 `cmake` 命令从 `CMakeLists.txt` 生成构建文件。 - **构建步骤**: 使用平台相关的构建工具(如 `make`)来编译项目。 ### 安装 CMake 确保你的系统上已经安装了 CMake。可以通过包管理器安装,或者从官方网站下载最新版本。对于 Linux 用户,通常可以使用如下命令安装: ```bash sudo apt-get install cmake ``` 对于 macOS 用户,可以使用 Homebrew: ```bash brew install cmake ``` Windows 用户可以从 CMake 官网下载安装程序。 ### 创建个简单的 CMake 项目 假设你有个简单的 C++ 项目,结构如下: ``` my_project/ ├── CMakeLists.txt └── src/ └── main.cpp ``` #### 编写 CMakeLists.txt 在项目根目录下创建 `CMakeLists.txt` 文件,并添加以下内容: ```cmake # 指定所需的最低版本 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(MyProject) # 添加可执行文件 add_executable(MyExecutable src/main.cpp) ``` #### 构建项目 进入项目根目录,创建并进入构建目录: ```bash mkdir build && cd build ``` 运行 CMake 配置和生成构建文件: ```bash cmake .. ``` 然后使用构建工具编译项目: ```bash make ``` 编译完成后,可以在 `build` 目录中找到生成的可执行文件。 ### 高级技巧 - **多目录项目**: 对于更复杂的项目,可能需要将源代码组织到多个子目录中。每个子目录都可以有其自己的 `CMakeLists.txt` 文件,使用 `add_subdirectory()` 来包含这些子目录。 - **自定义编译选项**: 可以通过 `option()` 命令在 CMake 中添加自定义的编译选项。 - **查找库**: CMake 提供了 `find_package()` 命令来查找外部库。 - **预处理宏**: 在 CMake 中可以设置预处理宏,用于条件编译。 - **安装规则**: 使用 `install()` 命令来定义安装规则,便于部署应用程序。 ### 示例:多目录项目 如果项目结构如下: ``` my_project/ ├── CMakeLists.txt ├── src/ │ ├── CMakeLists.txt │ └── main.cpp └── lib/ ├── CMakeLists.txt └── mylib.cpp ``` 主 `CMakeLists.txt` 应该包含: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) # 添加子目录 add_subdirectory(src) add_subdirectory(lib) ``` 在 `src/CMakeLists.txt` 中: ```cmake # 添加可执行文件,并链接库 add_executable(MyExecutable main.cpp) target_link_libraries(MyExecutable PRIVATE MyLibrary) ``` 而在 `lib/CMakeLists.txt` 中: ```cmake # 创建库 add_library(MyLibrary mylib.cpp) ``` 这样,当构建时,CMake 将会正确地处理所有依赖关系。 ### 学习资源 为了进步学习 CMake,你可以参考官方文档,或者在线教程,比如《从零开始详细介绍CMake》这样的入门教程,它涵盖了从基础概念到高级技巧的全方位指导[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值