[CMake笔记] 初识CMake
与CMake相遇
做C/C++的人都应该经历过,以往拿到一个开源代码,想自己编译出来,总会因为VS的版本不同而出现各种各样的问题,使编译过程困难重重,更多时候就会放弃使用它了。而这个过程反过来,也会使用一些开源项目难于推广。
另外,基于我的跨平台开发经历,更是一个灾难。刚毕业那会,我有一个项目是Windows下开发,但服务器是Ubuntu的,当初我是在windows下的VS2015开发,调试得没问题了,还要上传到服务器,再根据其环境写各种makefile
两年前吧,接触到OpenCV,看到里面竟然是使用CMakeLists.txt这个脚本,通过CMake程序就可以生成相应平台的编译工程了,简直太方便了。
CMake的HelloWorld
文件结构
helloworld
|--CMakeLists.txt
|--helloworld.cpp
CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0) # 指定项目名称,其实就是给变量PROJECT_NAME赋值
project(HelloWorld) # 查找指定目录下的所有源文件 并存放到指定变量名SRC中
aux_source_directory(. SRC) # 指定生成目标
add_executable(${PROJECT_NAME} ${SRC}
helloworld.cpp
因为现在的工作基本上是windows下的VS开发,所以我对于源文件与头文件的编写都会用CMake生成后,在VS里面再编写。
生成VS解决方案
CMake中
在选择【Specify the generator for this project】时,要注意一下所选的编译平台是32位还是64位的,若需要两种平台的则要创建两个解决方案的。
结果
总结
缺点
- 需要学习如何编写CMakeLists.txt,需要一点点学习成本;
- 每次添加源文件或头文件等,需要在源码文件夹下创建,可能还需要修改一下CMakeLists.txt,再到CMake中生成一下,不可直接在VS里添加哦!1
- 在这个章节中的实例中,使用的一些文件还是很初级的,如aux_source_directory函数只能查找源文件,头文件就没法添加到解决方案里,这给后期的修改带来了不小的麻烦,后期会再详说;
- 暂时没有了。
优点
- 实现了跨平台编译的管理,不需要再重复编写大量的编译脚本了。个人用起来还是很方便的
- 实现在使用Git或SVN时,对代码文件的纯洁管理,不会被提交与代码无关的工程文件(这是我个人的强迫症,被治愈了)
此纯属个人学习笔记,有错可以指正!
[CMake笔记] 初识CMake的更多相关文章
- CMake学习笔记一:初识cmake
1 cmake简介 1.1 背景知识 cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一个独立的开放源代码项目.项目的诞生时间是 2 ...
- cmake笔记
注:cmake . 当前文件夹(一个点) cmake .. 父目录(两个点) 例子一 一个经典的C程序,如何用cmake来进行构建程序呢? //main.c #include <stdi ...
- Cmake实践(Cmake Practice)第一部分
参考资料地址:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 一.初识cmake 1. C ...
- 【转载】CMake 简介和 CMake 模板
转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...
- mysqlQL 5.7 安装报错CMake Error at cmake/boost.cmake:81 (MESSAGE)
CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BO ...
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- CMake Error at cmake/OpenCVUtils.cmake
CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most ...
- Python笔记初识
Python笔记初识
- Phython笔记初识
Phython笔记初识 Python 1898 第一版本 1991 荷兰人 Guido 协议 Gpl 动态语音类型
随机推荐
- idea2019.2激活至2089年!
上图! 激活到2089年8月,绝对够用! 注意:在激活之前,无需改动 host 文件. 资料自取:链接:https://pan.baidu.com/s/1MzX5ewt6lbzHYuggP5sGE ...
- 查看Oracle的表中有哪些索引(用user_indexes和user_ind_columns)
用user_indexes和user_ind_columns系统表查看已经存在的索引 对于系统中已经存在的索引我们可以通过以下的两个系统视图(user_indexes和user_ind_columns ...
- 简单桶排序(Bucket Sort)
1.基本思想 桶排序是将待排序集合中处于同一个值域的元素存放在同一个桶中1. 2.算法设计2 假设有一个班级有5个人,这次期末他们分别考了5分,2分,4分,5分,8分(满分为10分).需要将这些分数从 ...
- 1010 Radix (25分)
改了一天也没明白,第7个数据是怎么卡的 #include <bits/stdc++.h> using namespace std; const int maxn=1005; typedef ...
- django之orm的高级操作以及xcc安全攻击
查询用法大全: 1. 比较运算符 # id > 3 res = models.UserInfo.objects.filter(id__gt=3) # id >= 3 res = model ...
- FYF的煎饼果子
利用等差数列公式就行了,可以考虑特判一下m >= n($ m, n \neq 1 $),这时一定输出“AIYAMAYA”. #include <iostream> using nam ...
- KK音标
目录 KK音标 参考 音标发音 音标口诀 五个规则 KK音标
- mysql5.7修改root密码
use mysql; update mysql.user set authentication_string=password('123456') where user='root'; flush p ...
- Spring Boot 2.x 入门前的准备-IntelliJ IDEA 开发工具的安装与使用
常用的用于开发 spring boot 项目的开发工具有 eclipse 和 IntelliJ IDEA 两种,最近有声音提出 visual code 也开始流行开发 java,而且确实如此, vs ...
- string的一些特殊点
无论是String还是new String最终都指向了String constant pool中,只不过是String直接指向了Stringconstant pool中.而new String是在He ...