Windows环境下使用cmd命令行结合cmake工具编译C/C++代码的方法
大部分工作在Linux环境下的C/C++语言的程序员,习惯了使用shell、cmake、make等工具来编译代码,切换到Windows环境后,也想使用类似的方法来做同样的事情。
·
前言
大部分工作在Linux环境下的C/C++语言的程序员,习惯了使用shell、cmake、make等工具来编译代码,切换到Windows环境后,也想使用类似的方法来做同样的事情。
这部分程序员,大概有如下几个理由:
- Linux环境下的习惯,一时不好改变
- Windows的Visual Studio IDE安装包太大了,占用有效的硬盘空间
- 欠缺Visual Studio的开发经验
工具准备
那么,应该怎么做呢?下面我提供一个demo。
需要的工具有:
- cmake,Visual Studio的组件之一
- MsBuild,Visual Studio的组件之一
其实就是安装了Visual Studio的一部分,我的选择项目如下:
写代码
准备好了编译工具后,我们开始写代码:
C代码 - main.cpp
#include <stdio.h>
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比较简单,希望给大家起到了抛砖引玉的效果,谢谢!
更多推荐
已为社区贡献2条内容
所有评论(0)