转自:
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:ReSimStudiocmakedemo>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:ReSimStudiocmakedemo>msbuild ALL_BUILD.vcxproj
Microsoft (R) 生成引擎版本 14.0.25420.1
版权所有(C) Microsoft Corporation。保留所有权利。
生成启动时间为 2020/7/2 10:16:26。
节点 1 上的项目“E:ReSimStudiocmakedemoALL_BUILD.vcxproj”(默认目标)。
项目“E:ReSimStudiocmakedemoALL_BUILD.vcxproj”(1)正在节点 1 上生成“E:ReSimStudiocmakedemoERO_CHECK.vcxpro
j”(2) (默认目标
)。
PrepareForBuild:
正在创建目录“Win32DebugERO_CHECK”。
正在创建目录“E:ReSimStudiocmakedemoDebug”。
正在创建目录“Win32DebugERO_CHECKERO_CHECK.tlog”。
InitializeBuildStatus:
正在创建“Win32DebugERO_CHECKERO_CHECK.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Checking Build System
FinalizeBuildStatus:
正在删除文件“Win32DebugERO_CHECKERO_CHECK.tlogunsuccessfulbuild”。
正在对“Win32DebugERO_CHECKERO_CHECK.tlogERO_CHECK.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:ReSimStudiocmakedemoERO_CHECK.vcxproj”(默认目标)的操作。
项目“E:ReSimStudiocmakedemoALL_BUILD.vcxproj”(1)正在节点 1 上生成“E:ReSimStudiocmakedemoHelloWorld.vcxpro
j”(3) (默认目标
)。
PrepareForBuild:
正在创建目录“HelloWorld.dirDebug”。
正在创建目录“HelloWorld.dirDebugHelloWorld.tlog”。
InitializeBuildStatus:
正在创建“HelloWorld.dirDebugHelloWorld.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Building Custom Rule E:/ReSimStudio/cmakedemo/CMakeLists.txt
ClCompile:
D:Program Files (x86)Microsoft Visual Studio 14.0VCinCL.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.dirDebug\" /Fd"HelloWorld.dirDebugvc140.pdb" /Gd /TP /analyze- /errorRepor
t:queue E:ReSimStudiocmakedemoHelloWorld.cpp
HelloWorld.cpp
Link:
D:Program Files (x86)Microsoft Visual Studio 14.0VCinlink.exe /ERRORREPORT:QUEUE /OUT:"E:ReSimStudiocma
kedemoDebugHelloWorld.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.dirDebugHelloWorld.obj
HelloWorld.vcxproj -> E:ReSimStudiocmakedemoDebugHelloWorld.exe
HelloWorld.vcxproj -> E:/ReSimStudio/cmakedemo/Debug/HelloWorld.pdb (Full PDB)
FinalizeBuildStatus:
正在删除文件“HelloWorld.dirDebugHelloWorld.tlogunsuccessfulbuild”。
正在对“HelloWorld.dirDebugHelloWorld.tlogHelloWorld.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:ReSimStudiocmakedemoHelloWorld.vcxproj”(默认目标)的操作。
PrepareForBuild:
正在创建目录“Win32DebugALL_BUILD”。
正在创建目录“Win32DebugALL_BUILDALL_BUILD.tlog”。
InitializeBuildStatus:
正在创建“Win32DebugALL_BUILDALL_BUILD.tlogunsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
Building Custom Rule E:/ReSimStudio/cmakedemo/CMakeLists.txt
FinalizeBuildStatus:
正在删除文件“Win32DebugALL_BUILDALL_BUILD.tlogunsuccessfulbuild”。
正在对“Win32DebugALL_BUILDALL_BUILD.tlogALL_BUILD.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:ReSimStudiocmakedemoALL_BUILD.vcxproj”(默认目标)的操作。
已成功生成。
0 个警告
0 个错误
已用时间 00:00:01.52
E:ReSimStudiocmakedemo>cd debug
E:ReSimStudiocmakedemoDebug>ls
'ls' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
E:ReSimStudiocmakedemoDebug>HelloWorld.exe
Hello World
E:ReSimStudiocmakedemoDebug>
总结
cmake给跨平台的C++程序提供了很好的构建解决方案。适合需要跨平台项目的使用。功能不多,简单,但还是比较实用的。建议阅读https://cmake.org/cmake-tutorial/ 。基本功能在tutorial里面都有介绍。
————————————————
版权声明:本文为CSDN博主「zhangyiant」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangyiant/article/details/51289404