【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM