Windows下使用CMake进阶
在CMake入门实践一文中,我们初略的介绍了CMake的跨平台性和使用方法。
本文将学习在Windows下如何系统的使用CMake,会涉及到msbuild ,nmake等Windows本地的工具库,如果不是很了解,可以先百度看看。
cmake有Windows的GNU工具,这个工具很傻瓜化,这里不做介绍。
回顾代码工程中有什么
- 源文件 如cpp 文件
- 头文件 如h文件
- 我们自己的库文件 ,lib 或者dll文件
- 三方库,不过一般而言,我们使用库文件的lib或者dll然后加上它的头文件即可
- 资源文件
- 其他?
将需要的东西在cmake脚本CMakeLists.txt中申明
CMakeLists.txt的写法规则及语法:
该文很全面了,我不再造轮子了
一键型编译
CMakeLists.txt 文件写好后,我们就可以开始编译了,和之前的介绍的一样,我们最好将编译生成的文件全部放入一个中间文件夹中。
linux下的一键编译是非常优美的,windows程序员因为被VS等IDE包养,并不是很愿意使用黑压压的命令行工作,但是,我会告诉你,使用命令行工作已经是大势所趋了。你不仅需要熟悉命令行工作,更应该擅长此道。
widows下也有自己的命令行编译工具,比如msbuild,nmake等。这两个工具是和VS一起升级维护的,所以对于像笔者这样,一台机器安装3个版本的VS的人,要使用正确版本的编译工具其实需要走些弯路。
使用nmake
以下是笔者希望使用VS2008的nmake需要完成的工作:
- 首先打开cmder
- 找到VS2008的安装路径,比如笔者的是E:\Program Files\Microsoft Visual Studio 9
- 在cmder中输入
"E:\Program Files\Microsoft Visual Studio 9\VC\vcvarsall.bat" x86(双引号很重要,必须, x86表示我希望编译32位程序) - 环境配置完成后,切换路径到win-build(这是我自定义的代码生成中间文件夹,外围才是我的工程代码)输入
cmake .. -G "NMake Makefiles" - 然后输入
nmake - 编译无误后生成了可执行程序
补充说明:
- 使用其他编译环境同VS2008即可,找到该版本的VS的目录,输入命令配置nmake环境
- 该配置环境只在本次控制台有效,不会影响你的系统配置
使用msbuild
使用msbuild的步骤和nmake大同小异:
将上面第4步的cmake .. -G "NMake Makefiles" 换成 cmake .. -G "Visual Studio 9 2008"
将上面第5步的nmake 换成 MSBuild.exe Project.sln 这个Project.sln 换成你自己的工程名即可
实现一键编译
可以把命令写成bat脚本 ,做到真正的一键编译。
echo off
echo 'start cmake in windows'
call "e:/Program Files/Microsoft Visual Studio 9/VC/vcvarsall.bat" x86
cd win-build
cmake .. -G "NMake Makefiles"
nmake
echo 'end all'
其他可以参考,将该bat文件放在和cmake脚本文件同路径下,即可一键生成exe执行文件。
参考
https://blog.csdn.net/qq_22042587/article/details/78850708
https://blog.csdn.net/yaoyuanyylyy/article/details/79024962
http://www.360doc.com/content/14/1113/13/9075092_424804822.shtml
https://blog.csdn.net/gxuan/article/details/7701035
https://blog.csdn.net/yanchuang1/article/details/69683236
https://www.cnblogs.com/cv-pr/p/6206921.html
https://blog.csdn.net/libaineu2004/article/details/78995740
Windows下使用CMake进阶的更多相关文章
- windows下安装cmake
windows下安装cmake 下载地址 download -> cmake-3.12.0-rc2-win64-x64.msi 安装 验证cmake --version
- windows下使用cmake编译zlib与libpng libjpeg
win7下使用VS2010编译jpeglib 1.下载源代码下载地址:http://www.ijg.org/files/, 选择最新版本的windows版本压缩包,进行下载. jpeg ...
- Windows下利用CMake和VS2013编译OpenCV
转载自:http://www.chengxulvtu.com/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html 获取OpenCV ...
- windows下使用cmake+mingw配置makefile
前面一节说了cmake简易使用,但是实际开发中项目文件非常多,使用哪种简易方式会导致代码十分混乱,因此本文介绍一种cmake管理大型项目的demo流程. 具体步骤如下: 1.创建相关的项目目录 cmd ...
- windows 下使用cmake指定visual studio 版本
https://blog.csdn.net/iceboy314159/article/details/87829950
- Windows下VTK6.0.0安装详解(CMake使用说明)
操作系统:Windows7,用到工具:Visual studio.CMake. 1.准备工作 VTK下载: 下载最新VTK稳定版(6.0.0,截至2013年7月)http://www.vtk.org/ ...
- Windows 下使用 MinGW 和 CMake 进行开发
CMake 是个非常棒的项目管理工具,这已经是毋庸置疑的. 一些小工具需要在 win 下开发,所以今天探索使用 MinGW 和 CMake 在 win 下的搭配使用.简单做记录. MinGW 使用 Q ...
- Windows下CMake编译安装OpenCV
Windows下CMake编译安装OpenCV 这是一个面向新手的在windows上运进opencv, helloword的教程. 在这里我们使用vs2019来编译opencv, 并运行一个hello ...
- windows下使用vs进行Proctocol Buffer开发(C++篇)
因工作原因接触Proctocol Buffer(protobuf),至于什么是protobuf,为何使用protobuf,我就不赘述了,百度下都是答案. 今天我介绍的是在windows下使用vs进行p ...
随机推荐
- TCP协议三次握手过程分析(改)
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- 解决IE6已终止操作问题
令人崩溃的IE6问题再次出现,打开某个页面时,弹出提示框“Internet Explorer无法打开Internet 站点...已终止操作”. 查了一下资料,感觉“因为js(一个比较复杂的js) ...
- [BZOJ]BST again
Description 求有多少棵大小为n的深度为h的二叉树.(树根深度为0:左右子树有别:答案对1000000007取模) Input 第一行一个整数T,表示数据组数. 以下T行,每行2个整数n和h ...
- L1-3 宇宙无敌加法器 - 令人激动的一道题目
L1-3 宇宙无敌加法器 - 令人激动的一道题目 感觉好久没有这么认真的做一道题了,今天看到一句话, 说是编程是一个工程型的工作,想要学好,"无他,唯手熟尔" 之前觉得自己笨,怀疑 ...
- 转载 - POJ分类很好很有层次感
from http://blog.csdn.net/zzycsx/article/details/49103451 OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2 ...
- poj3977 - subset - the second time - 暴力 + 二分
2017-08-26 11:38:42 writer:pprp 已经是第二次写这个题了,但是还是出了很多毛病 先给出AC代码: 解题思路: 之前在培训的时候只是笼统的讲了讲怎么做,进行二分对其中一边进 ...
- Examining the Rooms - 第一类斯特灵数
---恢复内容开始--- 2017-08-10 20:32:37 writer:pprp 题意如下: Recently in Teddy's hometown there is a competiti ...
- springboot项目属性配置及注意事项
在idea编辑器建的springboot项目中的resources包下的application.properties这个就是配置文件. 另外配置文件的文件名还可以是application.yml,在r ...
- 如何实现蓝牙空中升级BLE OTA
如何实现BLE OTA?什么叫DFU?如何通过UART实现固件升级?又如何通过USB实现固件升级?怎么保证升级的安全性?什么叫双备份(dual bank)DFU?什么叫单备份(single bank) ...
- linq 多条件join
var query=from a in db.A join b in db.B.Where(c=>c.num>3) on new {a.type ...