cmake简单使用

概述

cmake是一种跨平台编译工具,除了可以编译c,c++代码也可以编译其他语言的代码,其主要就是通过cmake执行CMakeLists.txt从而生成Makefile。下面就自己了解到的简单的一点知识,做以记录。更多可查看官网:https://cmake.org。

cmake简单使用

  1. 创建项目文件夹。
    在终端输入指令:mkdir testCmake-helloworld
  2. 创建项目文件及CMakeLists.txt。
    在终端输入:
    cd testCmake-helloworld
    touch CMakeLists.txt
    vim main.cpp
    打开main.cpp后,在其中写入如下内容:
    main.cppmain.cpp
#include <iostream>using namespace std;int main(int argc,char*argv[])
{cout<<"hello world!!"<<endl;return 0;
}

保存后退出。
终端输入:vim CMakeLists.txt
向CMakeLists.txt写入如下内容:

cmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello main.cpp)

保存退出,查看当前的文件列表:
$ ls
CMakeLists.txt build-hello-cmake main.cpp
可以看到有两个文件CMakeLists.txt 和main.cpp,一个文件夹build-hello-cmake,此时可以进入到构建目录build-hello-cmake中,输入下述指令:

cmake ..

终端会显示如下:

CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):Compatibility with CMake < 2.8.12 will be removed from a future version ofCMake.Update the VERSION argument <min> value or use a ...<max> suffix to tellCMake that the project does not need compatibility with older versions.-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/admin/Program/testCmake-helloworld/build-hello-cmake

接着终端输入:

make

终端显示如下:

[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

此时构建完成,在目录build-hello-cmake中生成可执行程序hello。当前路径下执行下述指令:

# admin @ bogon in ~/Program/testCmake-helloworld/build-hello-cmake [17:21:33] 
$ ./hello
hello world!!

会输出程序的运行结果。
上述是cmake执行构建的过程,总体来说就是下列指令:

mkdir 构建目录名
cd 构建目录名
cmake CMakeLists.txt所在的路径
make 

其构建项目最常用的四句指令就是上述所写。首先在项目目录下创建一个空文件夹,作为构建目录,即:mkdir 构建目录名;然后进入构建目录,即:cd 构建目录名;接下来执行cmake,但是在cmake的后面需要指明CMakeLists.txt所在的路径,最后执行make指令,整个项目生成可执行程序。
当不在构建目录里执行cmake时,可以按照下述方法来执行cmake:

admin @ bogon in ~/Program/testCmake-helloworld [17:31:29] 
$ cmake -S ./ -B ./build-hello-cmake 
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):Compatibility with CMake < 2.8.12 will be removed from a future version ofCMake.Update the VERSION argument <min> value or use a ...<max> suffix to tellCMake that the project does not need compatibility with older versions.-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/admin/Program/testCmake-helloworld/build-hello-cmake

其中-S指明了源文件所在的路径,-B指明了构建生成的文件所在的路径。
这样就可以在非构建目录下执行cmake,但生成的文件依旧存入到构建目录中。同样接下来也在项目目录下使用指令make,指令如下:

# admin @ bogon in ~/Program/testCmake-helloworld [17:33:09] 
$ make -C ./build-hello-cmake 
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

make指令中-C指明了生成可执行文件所在的路径。
以上仅供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管理修改

现在&#xff0c;假定你已经完全掌握了暂存区的概念。下面&#xff0c;我们要讨论的就是&#xff0c;为什么Git比其他版本控制系统设计得优秀&#xff0c;因为Git跟踪并管理的是修改&#xff0c;而非文件。 你会问&#xff0c;什么是修改&#xff1f; 比如你新增了一行&#x…

npm install安装依赖报错——常见报错解决方案

小伙伴在开发前端项目过程中&#xff0c;执行npm install安装项目依赖时&#xff0c;往往会遇到各种各样的报错&#xff0c;接下来建仔给大家总结一下几种常见报错解决方案! 第一种报错&#xff1a;无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 报错详…

AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志

戳蓝字“CSDN云计算”关注我们哦&#xff01;人物志&#xff1a;观云、盘点、对话英雄。以云计算风云人物为核心&#xff0c;聚焦个人成长、技术创新、产业发展&#xff0c;还原真实与鲜活&#xff01;本文来源&#xff1a;Siliconangle《Exclusive interview: How CEO Andy Ja…

撤销修改

自然&#xff0c;你是不会犯错的。不过现在是凌晨两点&#xff0c;你正在赶一份工作报告&#xff0c;你在readme.txt中添加了一行&#xff1a; Im writing a report.在你准备提交前&#xff0c;一杯咖啡起了作用&#xff0c;你猛然发现了stupid boss可能会让你丢掉这个月的奖金…

QtCreator下使用c++标准输入cin输出cout没有阻塞等待输入

引言 在QtCreator中编写c程序&#xff0c;其中需要从控制台输入&#xff0c;就用了c的cout和cin&#xff0c;本应该等待控制台输入文本&#xff0c;但是却没有。下面是具体的案例。 案例 本文基于QtCreator创建的qt控制台输出程序&#xff0c;创建时选择如下图所示的选项&am…

Docker 系列学习文章 | 什么是容器云?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;宝哥devops运维转自&#xff1a;云加社区腾小云导读&#xff1a;容器…

删除文件

在Git中&#xff0c;删除也是一个修改操作&#xff0c;我们实战一下&#xff0c;先添加一个新文件test.txt到Git并且提交&#xff1a; echo "test del file" >> test.txt git add test.txt git commit -m "add del test.txt"一般情况下&#xff0c;…

mvc设计模式的简单领悟

引言 mvc设计模式&#xff0c;是将数据模型与视图分离&#xff0c;通过控制器来建立起数据模型与视图之间的联系&#xff0c;当数据模型变化自动更新视图。其中M-数据模型&#xff0c;V-视图&#xff0c;C-控制器。下面是一个简单的对于MVC设计模式的使用。 示例 开发环境是…

添加远程库

现在的情景是&#xff0c;你已经在本地创建了一个Git仓库后&#xff0c;又想在GitHub创建一个Git仓库&#xff0c;并且让这两个仓库进行远程同步&#xff0c;这样&#xff0c;GitHub上的仓库既可以作为备份&#xff0c;又可以让其他人通过该仓库来协作&#xff0c;真是一举多得…

微服务精华问答 | 什么是金丝雀释放?

戳蓝字“CSDN云计算”关注我们哦&#xff01;微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。今天&#xff0c;就让我们来看看关于微服务更加有深度的问题吧。1Q&#xff1a;什么是金丝雀释放&#xff1f;A&#xff1a;Canary Rele…

UDP丢包问题及解决方案

概况 本文属于转载&#xff0c;其原文链接&#xff1a;https://blog.csdn.net/baidu_35692628/article/details/76165337。具体查看链接。

Git 远程配置

Git 配置篇02_远程配置 git 远程配置 2种方案 码云 Github 案例演示 码云 Github更改用户名和邮箱即可 任选1种 第1步&#xff1a;生成SSH key 输入下边命令一直回车&#xff08;4次回车&#xff09; ## 码云配置方案&#xff1a; ssh-keygen -t rsa -C "13396492261163…

虚拟器件—虚拟化技术的新利刃 | 时光机

戳蓝字“CSDN云计算”关注我们哦&#xff01;时光机&#xff1a;搭载这部时光机&#xff0c;带您回顾《程序员》大量优秀文章&#xff0c;重温经典技术干货&#xff0c;我们发现硬核技术永不过时&#xff0c;对于get要点、solve难题、提高自我&#xff0c;仍有非凡意义。作者&a…

关于TCP粘包的拙见

概述 本文主要概述TCP粘包的原因和如何解决TCP粘包的问题。 TCP粘包原因 由于TCP是字节流传输协议&#xff0c;又没有保护边界&#xff0c;传输过程中为了提高传输效率&#xff0c;其采用了一种优化方式&#xff0c;将发送时间间隔小数据量小的一起存入发送缓存区再发送&…

git从远程库克隆

首先&#xff0c;登陆GitHub&#xff0c;找到我们的learngit项目 第一种方式(老手建议)&#xff1a;通过命令将远程仓库的代码&#xff0c;拉取到本地&#xff0c;文件夹形式。 第二种方式(入门建议)&#xff1a;将远程的项目代码下载到本地&#xff0c;压缩包形式。 复制…

图解分布式架构的发展和演进 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;编注: 架构决定的系统的稳定性&#xff0c;扩展性和并发性&#xff0c;架构的演进是从…

C++中链表反转2

引言 周期按我也写过类似链表反转的文章&#xff0c;这个链表反转是在第二次写的时候写的&#xff0c;由于都是靠当时的思路&#xff0c;两个在代码实现上有所差异&#xff0c;仅以记录。 示例 编程环境 在vs2010下编写的C控制台输出程序&#xff0c;文件名由main.cpp改为t…

阿里云PolarDB重大更新:两大技术突破,传统数据库一键迁移上云

5月21日&#xff0c;阿里云PolarDB发布重大更新&#xff0c;提供传统数据库一键迁移上云能力&#xff0c;可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云&#xff0c;最快数小时内迁移完成。据估算&#xff0c;云上成本不到传统数据库的1/6。目前&#xff0c;…

C++中提高程序运行效率的方法集合

引言 由于其体系比较庞大&#xff0c;介于个人也是在不断完善和探索&#xff0c;故而此文是一个长期不定时更新的状态。 要点记录 函数在参数传递时&#xff0c;尽可能根据当时的情况&#xff0c;使用引用传递&#xff1b;&#xff08;引用是一种别名&#xff0c;不涉及变量…

Spring精华问答 | Spring Bean的自动装配是怎么回事?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分J…