CMake 教程一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/80397814

本文主要内容如下:

  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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

Maven的第一个小程序

关于maven的安装 : Install Maven in your computer

1652
来自专栏技术专栏

springcloud(一)-集成Eureka 服务注册与发现(慕课网廖师兄SpringCloud微服务实战)

让多个Eureka服务端两两注册,即一个Eureka做为另一个Eureka的客户端,然后让Client注册到每一个Eureka服务端上,这样,当一个服务端挂掉以...

1.8K1
来自专栏Java学习123

【Spring】Spring MVC原理及配置详解

2872
来自专栏java思维导图

Spring MVC 到 Spring BOOT的简化之路

从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信...

1842
来自专栏王二麻子IT技术交流园地

《SpringMVC从入门到放肆》一、概述

一、SpringMVC概述 View Service Dao DB Spring MVC interface interface Mysql im...

3658
来自专栏Java技术栈

Intellij Idea乱码解决方案都在这里了

乱码场景 使用Intellij Idea经常遇到乱码问题,可以总结为以下几类乱码的场景。 1、工程代码乱码。 2、main方法运行,控制台乱码。 3、tomca...

3595
来自专栏Danny的专栏

【EJB学习笔记】——实体Bean

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1153
来自专栏Java技术栈

终于,Spring 5.0正式发布了!

Spring 5.0都有什么新功能? 1、最低要求支持JDK8+, J2EE 7+。 2、移除了一些包、类及方法。 3、核心功能加强:全面应用jdk8并兼容j...

3397
来自专栏Python

linux每日命令(28):chgrp命令

在linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理。可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以。Ch...

661
来自专栏Java学习123

NFS常见错误

3978

扫码关注云+社区

领取腾讯云代金券