【C++】cmake初次编译-HelloWorld

转自:

cmake介绍
cmake是一个构建C++代码的跨平台工具,他能够干什么呢?他能够搜索你的平台环境,然后生成平台上用于Build的文件。在Windows上安装了Visual Studio, 他能够帮你生成.sln, .vcxproj文件。如果在Linux上,能够帮你生成makefile。在MAC OS上,帮你生成xcode的项目文件。利用这些文件你就可以在本地编译,链接文件。生成这些项目,solution文件的输入信息,就是一套自己编写的和平台无关的配置文件。一般使用CMakeLists.txt文件。

cmake在Windows上的安装
https://cmake.org/download/ 上下载Windows安装包,安装就可以了。

cmake的简单实用
编写C++文件
首先需要一个简单的Hello World程序。
HelloWorld.cpp

#include <iostream>

using namespace std;

int main() {
cout<<"Hello World"<<endl;
return 0;
}
 
然后需要一个CMakeLists.txt
在cpp文件相同的目录下(项目cpp源文件根目录)建立一个CMakeLists.txt文件。

cmake_minimum_required (VERSION 2.6)
project (HelloWorld)
add_executable (HelloWorld HelloWorld.cpp)
 
运行cmake
到CMakeLists.txt文件所在目录,运行cmake。

E:\ReSimStudio\cmakedemo>cmake .
-- Building for: Visual Studio 14 2015
-- The C compiler identification is MSVC 19.0.24215.1
-- The CXX compiler identification is MSVC 19.0.24215.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: E:/ReSimStudio/cmakedemo

E:\ReSimStudio\cmakedemo>msbuild ALL_BUILD.vcxproj
Microsoft (R) 生成引擎版本 14.0.25420.1
版权所有(C) Microsoft Corporation。保留所有权利。

生成启动时间为 2020/7/2 10:16:26。
节点 1 上的项目“E:\ReSimStudio\cmakedemo\ALL_BUILD.vcxproj”(默认目标)。
项目“E:\ReSimStudio\cmakedemo\ALL_BUILD.vcxproj”(1)正在节点 1 上生成“E:\ReSimStudio\cmakedemo\ZERO_CHECK.vcxpro
j”(2) (默认目标
)。
PrepareForBuild:
正在创建目录“Win32\Debug\ZERO_CHECK\”。
正在创建目录“E:\ReSimStudio\cmakedemo\Debug\”。
正在创建目录“Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\”。
InitializeBuildStatus:
正在创建“Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Checking Build System
FinalizeBuildStatus:
正在删除文件“Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”。
正在对“Win32\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\ReSimStudio\cmakedemo\ZERO_CHECK.vcxproj”(默认目标)的操作。

项目“E:\ReSimStudio\cmakedemo\ALL_BUILD.vcxproj”(1)正在节点 1 上生成“E:\ReSimStudio\cmakedemo\HelloWorld.vcxpro
j”(3) (默认目标
)。
PrepareForBuild:
正在创建目录“HelloWorld.dir\Debug\”。
正在创建目录“HelloWorld.dir\Debug\HelloWorld.tlog\”。
InitializeBuildStatus:
正在创建“HelloWorld.dir\Debug\HelloWorld.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Building Custom Rule E:/ReSimStudio/cmakedemo/CMakeLists.txt
ClCompile:
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe /c /Zi /nologo /W1 /WX- /Od /Ob0 /Oy- /D WIN3
2 /D _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forSco
pe /Zc:inline /GR /Fo"HelloWorld.dir\Debug\\" /Fd"HelloWorld.dir\Debug\vc140.pdb" /Gd /TP /analyze- /errorRepor
t:queue E:\ReSimStudio\cmakedemo\HelloWorld.cpp
HelloWorld.cpp
Link:
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\link.exe /ERRORREPORT:QUEUE /OUT:"E:\ReSimStudio\cma
kedemo\Debug\HelloWorld.exe" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ol
e32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='fal
se'" /manifest:embed /DEBUG /PDB:"E:/ReSimStudio/cmakedemo/Debug/HelloWorld.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /D
YNAMICBASE /NXCOMPAT /IMPLIB:"E:/ReSimStudio/cmakedemo/Debug/HelloWorld.lib" /MACHINE:X86 /SAFESEH /machine:X8
6 HelloWorld.dir\Debug\HelloWorld.obj
HelloWorld.vcxproj -> E:\ReSimStudio\cmakedemo\Debug\HelloWorld.exe
HelloWorld.vcxproj -> E:/ReSimStudio/cmakedemo/Debug/HelloWorld.pdb (Full PDB)
FinalizeBuildStatus:
正在删除文件“HelloWorld.dir\Debug\HelloWorld.tlog\unsuccessfulbuild”。
正在对“HelloWorld.dir\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\ReSimStudio\cmakedemo\HelloWorld.vcxproj”(默认目标)的操作。

PrepareForBuild:
正在创建目录“Win32\Debug\ALL_BUILD\”。
正在创建目录“Win32\Debug\ALL_BUILD\ALL_BUILD.tlog\”。
InitializeBuildStatus:
正在创建“Win32\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Building Custom Rule E:/ReSimStudio/cmakedemo/CMakeLists.txt
FinalizeBuildStatus:
正在删除文件“Win32\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild”。
正在对“Win32\Debug\ALL_BUILD\ALL_BUILD.tlog\ALL_BUILD.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\ReSimStudio\cmakedemo\ALL_BUILD.vcxproj”(默认目标)的操作。


已成功生成。
0 个警告
0 个错误

已用时间 00:00:01.52

E:\ReSimStudio\cmakedemo>cd debug

E:\ReSimStudio\cmakedemo\Debug>ls
'ls' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

E:\ReSimStudio\cmakedemo\Debug>HelloWorld.exe
Hello World

E:\ReSimStudio\cmakedemo\Debug>

总结
cmake给跨平台的C++程序提供了很好的构建解决方案。适合需要跨平台项目的使用。功能不多,简单,但还是比较实用的。建议阅读https://cmake.org/cmake-tutorial/ 。基本功能在tutorial里面都有介绍。
————————————————
版权声明:本文为CSDN博主「zhangyiant」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangyiant/article/details/51289404

posted @ 2020-07-02 10:57  咸鱼翻身  阅读(1569)  评论(0编辑  收藏  举报