CMake入门-01-从HelloWorld开始
工作环境
- 系统:macOS Mojave 10.14.6
- CMake: Version 3.15.0-rc4
从 Hello,World! 开始
(1) 新建 hello 目录,创建文件 CMakeLists.txt、main.cpp
$ mkdir hello
$ cd hello
$ touch CMakeLists.txt main.cpp
$ ll
-rw-r--r-- 1 staff staff 124B 8 14 17:19 CMakeLists.txt
-rw-r--r--@ 1 staff staff 145B 8 14 21:33 main.cpp
(2) 编写程序代码 main.cpp,其代码如下:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
/* code */
cout << "Hello,World!" << endl;
return 0;
}
(3) 编写 CMakeLists.txt,如下:
# cmake 最低版本需求,不加入此行会受到警告信息
cmake_minimum_required(VERSION 3.15.0)
# 项目名设置为 hello
project(hello)
# 将当前目录中的源文件名称赋值给变量 SRC_LIST
aux_source_directory(. SRC_LIST)
# 指示变量 SRC_LIST 中的源文件需要编译成一个名称为 hello 的可执行文件
add_executable(hello ${SRC_LIST})
(4) 执行 cmake & make 编译
# 进入 hello 目录
$ pwd
/Users/staff/Desktop/hello
$ ll
-rw-r--r--@ 1 staff staff 124B 8 14 17:19 CMakeLists.txt
-rw-r--r--@ 1 staff staff 145B 8 14 21:33 main.cpp
# 执行 cmake . 命令
$ cmake .
-- The C compiler identification is AppleClang 10.0.1.10010046
-- The CXX compiler identification is AppleClang 10.0.1.10010046
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/staff/Desktop/hello
# 执行 make 命令
$ make
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello
# 运行我们的 hello 程序
$ ./hello
Hello,World!
(5) 外部编译方式
cmake 可以直接在当前目录进行编译,但是,这种做法会将所有生成的中间文件和源代码混在一起,而且 cmake 生成的 makefile 无法跟踪所有的中间文件,即不容易将所有的中间文件删除。
- 之前编译方式的目录(中间文件和源代码混在一起):
$ pwd
/Users/staff/Desktop/hello
$ ll
-rw-r--r-- 1 staff staff 13K 8 14 21:50 CMakeCache.txt
drwxr-xr-x 12 staff staff 384B 8 14 21:51 CMakeFiles
-rw-r--r--@ 1 staff staff 124B 8 14 17:19 CMakeLists.txt
-rw-r--r-- 1 staff staff 4.7K 8 14 21:50 Makefile
-rw-r--r-- 1 staff staff 1.3K 8 14 21:50 cmake_install.cmake
-rwxr-xr-x 1 staff staff 18K 8 14 21:51 hello
-rw-r--r--@ 1 staff staff 145B 8 14 21:33 main.cpp
$ ./hello
Hello,World!
- 使用外部编译方式:
$ pwd
/Users/staff/Desktop/hello
$ ll
-rw-r--r--@ 1 staff staff 124B 8 14 17:19 CMakeLists.txt
-rw-r--r--@ 1 staff staff 145B 8 14 21:33 main.cpp
# 在 hello 文件夹中新建 build 文件夹
$ mkdir build
$ cd build
$ pwd
/Users/staff/Desktop/hello/build
# 在 hello/build 文件夹中,执行 cmake & make 编译
$ cmake ..
-- The C compiler identification is AppleClang 10.0.1.10010046
-- The CXX compiler identification is AppleClang 10.0.1.10010046
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/hubin/Desktop/hello/build
$ make
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello
$ ./hello
Hello,World!
- 外部编译方式的目录为:
$ pwd
/Users/staff/Desktop/hello
$ tree .
.
├── CMakeLists.txt
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ │ ├── 3.15.0-rc4
│ │ │ ├── ... 省略
│ │ └── progress.marks
│ ├── Makefile
│ ├── cmake_install.cmake
│ └── hello
└── main.cpp
相关参考:
CMake 官方网站
联系作者:
CMake入门-01-从HelloWorld开始的更多相关文章
- CMake入门-03-还是HelloWorld
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-math 目录里的文件编译成静态库再由 main 函数调用 ...
- CMake入门教程(转帖)
本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...
- CMake入门(二)
CMake入门(二) 最后更新日期:2014-04-25 by kagula 阅读前提:<CMake入门(一)>.Linux的基本操作 环境: Windows 8.1 64bit英文版.V ...
- CMake入门
CMake入门 CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似 ...
- C++ CMake 入门实战[转载]
C++ CMake 入门实战 2016-11-05 CMake用于跨平台的编译系统,对于通常的c/c++工程,都是通过make来进行编译的,CMake可以通过指令生成Makefile文件来指导整个项目 ...
- VScode 使用 CMake 入门
参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...
- iOS系列 基础篇 01 构建HelloWorld,剖析并真机测试
iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心 ...
- CMake 入门实战 | HaHack
CMake 入门实战 | HaHack undefined
- React-Native入门指南之HelloWorld
iOS React-Native入门指南之HelloWorld React-native 作为facebook开源项目,最近是火的一塌糊涂,它采用node.js能够写ios和android的nativ ...
- 不用搭环境的10分钟AngularJS指令简易入门01(含例子)
不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...
随机推荐
- 2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础
2018-2019-2 网络对抗技术 20165311 Exp 9 Web安全基础 基础问题回答 实践过程记录 WebGoat安装 SQL注入攻击 1.命令注入(Command Injection) ...
- Code First 迁移----官方 应用程序启动时自动升级(MigrateDatabaseToLatestVersion 初始值设定项)
Code First 迁移 如果使用的是 Code First 工作流,推荐使用 Code First 迁移改进应用程序的数据库架构. 迁移提供一组允许以下操作的工具: 创建可用于 EF 模型的初始数 ...
- scroll-view组件实现下拉刷新, 拉到底加载更多
官方文档已声明,即使在page.json和app.json中开启下拉刷新,scroll-view组件也是不支持的.但我们可以通过曲线救国的方法来实现 实现代码 // wxml <scroll-v ...
- 在基于acpi的linux系统上如何检查当前系统是否支持深度睡眠?
答: 执行以下命令: # dmesg|grep -i acpi |grep -i supports (S3表示支持深度睡眠) ACPI: (supports S0 S1 S3 S4 S5)
- Javascript-基本类型
数字 JavaScript不区分整数和浮点数,所有数字都用浮点数表示. 能够表示最大值是 -253 ~ 253,包含边界.超过范围的数无法保证低位数字的精度. JavaScript能直接识别十进制的整 ...
- Kibana的安装与配置
Kibana的安装与配置 配置 [root@es01 kibana-5.6.3-linux-x86_64]# egrep -v '^$|^#' config/kibana.yml server.hos ...
- springboot之多模块化项目打包
1.目录结构 2.打成war包,只需在web子项目中的pom文件中添加 <packaging>war</packaging> <build> <!-- 为ja ...
- Function mysql_db_query() is deprecated 错误解决
方法一:@ 在任何错误语句之前加上@符号,即可屏蔽! 方法二:error_reporting 在PHP文件第一行加上:error_reporting(0); 即可屏蔽! 方法三:display_err ...
- hadoop在windows上的配置文件
core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <val ...
- 异地协作,A地上传jar包到B地服务器上传速率慢
在A地使用ftp服务器,再登录B地的目标服务器,使用ftp命令从ftp服务器下载文件,速度快点,下载带宽比上传带宽要大一点 https://blog.csdn.net/df0128/article/d ...