维基百科介绍“CMake是个开源跨平台自动化建构系统,它用配置文件控制建构过程(build process)的方式和UnixMake相似,只是CMake的配置文件取名为CMakeLists.txt。Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或WindowsVisual C++的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和SCons等其他类似系统的区别之处。”

1. CMake安装

https://cmake.org/download/, windows下载cmake-3.5.2-win32-x86.msi

安装后的界面

2. Hello World Example

假设你建立了文件夹 E:\Playground\CMakeExamples\HelloWorld,下面有一个文件HelloWorld.cpp

#include <iostream>
int main()
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}

在同一文件夹下面创建CMakeLists.txt文件

cmake_minimum_required(VERSION 3.0)
project (hello)

add_executable(hello helloworld.cpp)

  • 第一行设置需要的CMake最低版本号,一般设置为你目前使用的CMake版本号,便于后续维护工作。
  • 第二行设置project名字
  • 第三行add_executable,第一个参量为生成可执行文件名字,取决于所在平台会生成hello.exe,或者hello.a或其他格式。第二个参量为所需要的源文件列表。

图形界面下运行:

在Where is the source code后面填写CMakeLists.txt所在文件夹,注意是CMakeLists.txt所在文件夹,不是HelloWorld.cpp所在文件夹。后面例子会讲到源文件与CMakeLists不在同一目录下的情形。

Where to build the binaries: 可以是任意一个文件夹,保持生成的项目文件,这里我选择生成在Build文件夹下。设置后点击 Configure后你需要选择项目生成器,这里我选择Visual Studio 14 2015 Win64

点击Finish后

CMake自动设置各种变量,不用理会红色部分,点击Generate,在Build文件夹下面会生成

生成了hello.sln,project呢,除了hello.vcxproj还有ALL_BUILD.vcxproj和ZERO_CHECK.vcxproj。

stackoverflow上给的答案是

After some more searching, I found the answer at https://cmake.org/pipermail/cmake/2008-November/025448.html:

Armin Berres — 11/22/2008, 3:12:41 PM

ZERO_CHECK will rerun cmake. You can/should execute this after changing something on your CMake files.

ALL_BUILD is simply a target which builds all and everything project in the active solution, I guess one can compare it to "make all".

你可以用visual studio打开hello.sln,编译,运行。这里我们用msbuild编译。如果命令行提示msbuild无法找到,请先添加C:\Windows\Microsoft.NET\Framework64\v4.0.30319到系统PATH变量中。

在Build目录下,运行

msbuild hello.vcxproj

运行Debug\hello.exe,查看输出。

如果要编译成Release,运行

msbuild /p:Configuration=Release hello.vcxproj

最新文章

  1. 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇
  2. jQuery---中的动画
  3. SAML : A SAML stack
  4. mysql SELECT FOR UPDATE语句使用示例
  5. GTA项目 三, 使用 bootstrap table展示界面,使得data和UI分离
  6. Javascript中setTimeout()的用法详解
  7. Linux平台下Java调用C函数
  8. ORACLE与.NET类型对应关系(转)
  9. android自定义控件之模仿优酷菜单
  10. ARM中断处理过程
  11. [转载]使用awk进行数字计算,保留指定位小数
  12. Java基础 -- 深入理解Java异常机制
  13. python小白——进阶之路——day3天-———运算符
  14. MIUI8系统完整刷入开发版开启root权限的经验
  15. 获取百度地图POI数据三(模拟关键词搜索)
  16. app自动化测试Appium+python
  17. QIM量化
  18. 高性能IO之Reactor模式
  19. 00-JAVA语法基础--动手动脑
  20. openssl dgst(生成和验证数字签名)

热门文章

  1. ionic cordova 热更新的一些问题
  2. C#中的选择语句
  3. pptp 之 静态路由
  4. Linux上搭建Elasticsearch服务器并同步数据库
  5. SSH开源框架的优缺点
  6. JS 控制CSS样式表
  7. X86 Socket 通信
  8. 【HDU1730】Northcott Game(Nim问题)
  9. Struts2.3.15.1源码浅析
  10. 获取本机IP