Windows环境下使用cmd命令行结合cmake工具编译C/C++代码的方法

前言

大部分工作在Linux环境下的C/C++语言的程序员,习惯了使用shell、cmake、make等工具来编译代码,切换到Windows环境后,也想使用类似的方法来做同样的事情。
这部分程序员,大概有如下几个理由:

  • Linux环境下的习惯,一时不好改变
  • Windows的Visual Studio IDE安装包太大了,占用有效的硬盘空间
  • 欠缺Visual Studio的开发经验

工具准备

那么,应该怎么做呢?下面我提供一个demo。
需要的工具有:

  • cmake,Visual Studio的组件之一
  • MsBuild,Visual Studio的组件之一

其实就是安装了Visual Studio的一部分,我的选择项目如下:
Windows环境下使用cmd命令行结合cmake工具编译C/C++代码的方法_第1张图片

写代码

准备好了编译工具后,我们开始写代码:

C代码 - main.cpp

#include 

void main(int argc, char *argv[]) {
    printf("cmake on windows");
}

cmake代码 - CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(cmake_on_win)

add_executable(${PROJECT_NAME} main.cpp)

开始编译、运行 - 我使用的cmd是MINGW

创建编译路径 - build

admin@DESKTOP MINGW64 /e/temp/cmake_on_win
$ mkdir build

admin@DESKTOP MINGW64 /e/temp/cmake_on_win
$ cd build/

cmake

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ cmake ..
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
-- The C compiler identification is MSVC 19.29.30141.0
-- The CXX compiler identification is MSVC 19.29.30141.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: d:/Program Files/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/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/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: E:/temp/cmake_on_win/build

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ ls
ALL_BUILD.vcxproj          cmake_on_win.vcxproj          ZERO_CHECK.vcxproj
ALL_BUILD.vcxproj.filters  cmake_on_win.vcxproj.filters  ZERO_CHECK.vcxproj.filters
cmake_install.cmake        CMakeCache.txt
cmake_on_win.sln           CMakeFiles/

MsBuild

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ MSBuild.exe cmake_on_win.sln
用于 .NET Framework 的 Microsoft (R) 生成引擎版本 16.11.2+f32259642
版权所有(C) Microsoft Corporation。保留所有权利。

在此解决方案中一次生成一个项目。若要启用并行生成,请添加“-m”开关。
生成启动时间为 2022/9/26 18:01:51。
节点 1 上的项目“E:\temp\cmake_on_win\build\cmake_on_win.sln”(默认目标)。
ValidateSolutionConfiguration:
  正在生成解决方案配置“Debug|x64”。
ValidateProjects:
  在解决方案配置“Debug|x64”中未选定生成项目“ALL_BUILD”。
项目“E:\temp\cmake_on_win\build\cmake_on_win.sln”(1)正在节点 1 上生成“E:\temp\cmake_on_win\build\ZERO_CHECK.vcxproj”(2) (默认目标)。
PrepareForBuild:
  正在创建目录“x64\Debug\ZERO_CHECK\”。
  正在创建目录“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\”。
InitializeBuildStatus:
  正在创建“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
  Checking Build System
FinalizeBuildStatus:
  正在删除文件“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild”。
  正在对“x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\temp\cmake_on_win\build\ZERO_CHECK.vcxproj”(默认目标)的操作。
项目“E:\temp\cmake_on_win\build\cmake_on_win.sln”(1)正在节点 1 上生成“E:\temp\cmake_on_win\build\cmake_on_win.vcxproj.metaproj”(3) (默认目标)。
项目“E:\temp\cmake_on_win\build\cmake_on_win.vcxproj.metaproj”(3)正在节点 1 上生成“E:\temp\cmake_on_win\build\cmake_on_win.vcxproj”(4) (默认目标)。
PrepareForBuild:
  正在创建目录“cmake_on_win.dir\Debug\”。
  正在创建目录“E:\temp\cmake_on_win\build\Debug\”。
  正在创建目录“cmake_on_win.dir\Debug\cmake_on_win.tlog\”。
InitializeBuildStatus:
  正在创建“cmake_on_win.dir\Debug\cmake_on_win.tlog\unsuccessfulbuild”,因为已指定“AlwaysCreate”。
CustomBuild:
  Building Custom Rule E:/temp/cmake_on_win/CMakeLists.txt
ClCompile:
  D:\Program Files\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\CL.exe /c /Zi /nologo /W3 /WX- /diagnostics:column /Od /Ob0 /D WIN32 /D _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /Fo"cmake_on_win.dir\Debug\\" /Fd"cmake_on_win.dir\Debug\vc142.pdb" /external:W3 /Gd /TP /errorReport:queue E:\temp\cmake_on_win\main.cpp
  main.cpp
Link:
  D:\Program Files\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\link.exe /ERRORREPORT:QUEUE /OUT:"E:\temp\cmake_on_win\build\Debug\cmake_on_win.exe" /INCREMENTAL /ILK:"cmake_on_win.dir\Debug\cmake_on_win.ilk" /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"E:/temp/cmake_on_win/build/Debug/cmake_on_win.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"E:/temp/cmake_on_win/build/Debug/cmake_on_win.lib" /MACHINE:X64  /machine:x64 cmake_on_win.dir\Debug\main.obj
  cmake_on_win.vcxproj -> E:\temp\cmake_on_win\build\Debug\cmake_on_win.exe
FinalizeBuildStatus:
  正在删除文件“cmake_on_win.dir\Debug\cmake_on_win.tlog\unsuccessfulbuild”。
  正在对“cmake_on_win.dir\Debug\cmake_on_win.tlog\cmake_on_win.lastbuildstate”执行 Touch 任务。
已完成生成项目“E:\temp\cmake_on_win\build\cmake_on_win.vcxproj”(默认目标)的操作。
已完成生成项目“E:\temp\cmake_on_win\build\cmake_on_win.vcxproj.metaproj”(默认目标)的操作。
已完成生成项目“E:\temp\cmake_on_win\build\cmake_on_win.sln”(默认目标)的操作。

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

已用时间 00:00:01.84

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ ls
ALL_BUILD.vcxproj          cmake_on_win.vcxproj          x64/
ALL_BUILD.vcxproj.filters  cmake_on_win.vcxproj.filters  ZERO_CHECK.vcxproj
cmake_install.cmake        CMakeCache.txt                ZERO_CHECK.vcxproj.filters
cmake_on_win.dir/          CMakeFiles/
cmake_on_win.sln           Debug/

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ ls Debug/
cmake_on_win.exe*  cmake_on_win.pdb

运行

admin@DESKTOP MINGW64 /e/temp/cmake_on_win/build
$ Debug/cmake_on_win.exe
cmake on windows

demo比较简单,希望给大家起到了抛砖引玉的效果,谢谢!

你可能感兴趣的:(Windows平台C语言开发,c++,bash)