Although even visual studio build tool must be installed, command line compiler can actually run completely independently, so you can install it in any temporary location (such as in virtual machine), and then use following batch script to extract it, note that directories, version numbers, etc. should be modified according to your actual situation:
@echo off
cd /d %~dp0
robocopy /mir "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64" "%CD%\vc\bin"
robocopy /mir "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\include" "%CD%\vc\include"
robocopy /mir "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.43.34808\lib\x64" "%CD%\vc\lib"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64" "%CD%\win\bin"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared" "%CD%\win\include\shared"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt" "%CD%\win\include\ucrt"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64" "%CD%\win\lib\ucrt"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um" "%CD%\win\include\um"
robocopy /mir "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64" "%CD%\win\lib\um"
Then create env.bat
in directory. The purpose of this batch file is to set compiler's environment variables. You can do setup by call
ing it:
@echo off
pushd %~dp0
set PATH=%CD%\vc\bin;%CD%\win\bin;%PATH%
set Include=%CD%\vc\include;%CD%\win\include\shared;%CD%\win\include\ucrt;%CD%\win\include\um;%INCLUDE%
set Lib=%CD%\vc\lib;%CD%\win\lib\ucrt;%CD%\win\lib\um;%LIB%
popd
Finally, use following c code, save as utf-8 encoded test_msvc.c
, in command prompt switch to utf-8 by executing chcp 65001
, and then compile and run it using cl test_msvc.c /link /NODEFAULTLIB msvcrt.lib libvcruntime.lib ucrt.lib kernel32.lib user32.lib && test_msvc.exe
to test if any files are missing and if ucrt encoding is correct.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
puts("Hello, World!");
puts("你好,世界!");
int i = 10;
MessageBox(NULL, "Hello, World!", "Greetings", MB_OK);
return EXIT_SUCCESS;
}
According to https://learn.microsoft.com/en-us/cpp/porting/upgrade-your-code-to-the-universal-crt?view=msvc-170 and https://learn.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features?view=msvc-170, c runtime of msvc has been divided into three parts. Above compilation command is best way to generate smallest size without dependency vcruntime140.dll
(all others are dynamically linked).
Top comments (0)