CMake 入门教程:从零开始构建 C/C++ 项目
CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括*C++、C、Python、Java*等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目
安装CMake
首先,需要下载并安装CMake。可以从CMake官网下载。如果404 Not Found,可以试一下这个国内镜像网址下载地址。
创建项目文件夹
在本地创建一个项目文件夹,用于存放项目的源代码和构建文件。
创建源代码文件
在项目文件夹中创建一个源代码文件,例如hello.c或hello.cpp。在文件中编写一个简单的程序,例如输出“Hello, World!”。源码如下:
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
新建CMakeLists.txt文件
在项目文件夹中创建一个名为CMakeLists.txt的文件。该文件是CMake的构建配置文件,用于指定项目的源代码文件、编译选项和生成的可执行文件等信息。
以下是一个简单的CMakeLists.txt文件示例:
# 指定CMake版本
cmake_minimum_required(VERSION 3.10)
# 指定项目名称
project(hello)
# 添加源代码文件
add_executable(hello hello.cpp)
上述代码中,cmake_minimum_required指定了CMake的最低版本要求,project指定了项目的名称。add_executable指定了生成的可执行文件名称和源代码文件的路径。
构建项目
在项目文件夹中打开终端,输入以下命令进行构建:
mkdir build # 创建一个build文件夹
cd build # 进入build文件夹
cmake .. # 生成Makefile文件
make # 编译源代码并生成可执行文件
执行完以上命令后,会在build文件夹中生成一个可执行文件hello。
运行项目
在终端中输入以下命令运行生成的可执行文件:
./hello
此时,将输出Hello, World!信息。至此,一个简单的C/C++项目就被成功构建了。
跨平台构建
CMake支持在不同的操作系统和编译器下自动生成对应的构建文件。因此,只需要保证在不同平台上安装了相应的编译器和工具链,就可以实现跨平台构建。
下面是一个在Windows和Linux下都可以构建的CMakeLists.txt文件示例:
cmake_minimum_required(VERSION 3.10)
project(my_project)
if(WIN32)
set(CMAKE_CXX_COMPILER "MSVC")
elseif(UNIX)
set(CMAKE_CXX_COMPILER "g++")
endif()
set(CMAKE_CXX_STANDARD 11)
add_executable(hello hello.cpp)
在这个示例中,我们使用if语句来判断平台类型,并设置相应的编译器。通过这种方式,可以实现在不同平台下都可以编译和构建项目的目的。
总结
本文介绍了使用CMake构建一个简单的C/C++项目的步骤。首先需要安装CMake,并创建一个项目文件夹。然后创建源代码文件和CMakeLists.txt文件。最后,在终端中输入命令进行构建和运行。CMake可以根据项目的规模和需求,灵活配置构建选项,方便快捷地完成自动化构建。
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
CMake 入门教程:从零开始构建 C/C++ 项目的更多相关文章
- CMake入门教程(转帖)
本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...
- cmake入门之内部构建
https://www.cnblogs.com/coderfenghc/tag/cmake/ https://cmake.org/cmake/help/v3.16/guide/tutorial/ind ...
- phaser3入门教程-从零开始开发一个打砖块游戏
项目代码 项目代码 体验一下 空格开始,左右箭头控制移动 体验一下 Phaser简介 Phaser是一个HTML5游戏框架.它使用了许多HTML5 API,例如Canvas,WebGL,Audio,G ...
- cmake入门:01 构建一个简单的可执行程序
一.目录结构 CMakeLists.txt:cmake 工程入口文件,包含当前目录下的工程组织信息.cmake 指令根据此文件生成相应的 MakeFile 文件. Hello.c: 源代码文件 bui ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- WPF入门教程系列一
WPF入门教程 一. 前言 公司项目基于WPF开发,最近项目上线有点空闲时间写一篇基于wpf的基础教材,WPF也是近期才接触,学习WPF也是在网上查资料与微软的MSDN进行学习,写本博客的目为了温 ...
- CMake快速入门教程-实战
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...
随机推荐
- AFNetworking整体框架简单整理
一.AFNetworking整体框架是怎样的 1.UIKit集成模块 UIKit 2.请求序列化 Serialization 3.响应序列化 Serialization 4.会话 NSURLSessi ...
- maven创建父子工程
目录 创建父工程 创建子工程 将项目编译为eclipse项目 将项目导入eclipse 修改依赖关系:service依赖dao,web依赖service JavaProject的pom.xml文件说明 ...
- C++ 模板的笔记2
C++模板的笔记2 关于可变参函数模板借鉴了一部分笔记,感谢大佬 类模板中的嵌套 类模板可以嵌套其他类模板,就像普通类可以嵌套其他普通类一样.嵌套的类模板可以访问外部类模板的成员,包括私有成员. 示例 ...
- C++ //栈 stack 容器 先进后出 不允许遍历
1 //栈 stack 容器 先进后出 不允许遍历 2 3 4 #include<iostream> 5 #include<stack> 6 7 using namespace ...
- 借助 Terraform 功能协调部署 CI/CD 流水线-Part 1
在当今快节奏的开发环境中,实现无缝.稳健的 CI/CD 流水线对于交付高质量软件至关重要.在本文中,我们将向您介绍使用 Bitbucket Pipeline.ArgoCD GitOps 和 AWS E ...
- Excel去除表格密码保护
表格受密码保护时,我们修改数据Excel弹出"您试图更改的单元格或图表受保护,因而是只读的.若要修改受保护单元格或图表,请先使用'撤消工作表保护'命令(在'审阅'选项卡的'更改'组中)来取消 ...
- Socket编程:htons()、htonl()、ntohs()、ntohl()
前言 在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons().htonl().ntohs().ntohl(). 查阅资料得知,这是涉及到网 ...
- Java实现对ES数据的新增,删除,修改,及合并
Java实现对ES数据的新增,删除,修改,及合并 新增数据 代码: @Autowired private RestHighLevelClient client; /** * @description ...
- 解决Abp设置DefaultLanguage默认语言不生效的问题
@ 目录 现象 原因分析 解决问题 现象 默认地,Abp的语言提供程序将返回的CultureInfo为En,在一些默认实现的接口(比如/api/TokenAuth/Authenticate)返回的错误 ...
- [VueJsDev] 日志 - nginxConfig 配置文件备份
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html nginxConfig 配置文件备份 ::: details ...