静态 link 所有依赖项,这样最终用户将永远不会被要求安装 vc_redist.exe

Statically link all dependences so that the end user will never be asked to install vc_redist.exe

我正在使用 VS 2019 构建一个 Windows 可执行文件。当我 运行 它在我的机器上时,它可以工作,但我不能 100% 确定它是否适用于最终用户没有 vc_redist.x64.exe 2019 版。(尤其是 Win7 用户 - 它处于用户仍在使用此版本的利基市场)。

如何静态 link 一切,以便最终用户永远不会被要求下载和安装 Visual C++ Redistributable "vc_redist"

我正在使用 msbuild.exe,没有使用 IDE。 要在 .vcxproj 文件或 .cpp 文件中添加哪个设置来启用完全静态 linking,以防止需要 vcredist?

我的 .cpp 代码需要这些库:

#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "winmm.lib")

示例 .vcxproj:

<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>    
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.default.props" />
  <PropertyGroup>
    <ConfigurationType>Application</ConfigurationType>
    <PlatformToolset>v142</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ItemGroup>
    <ClCompile Include="main.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="main.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
</Project>

注意:它是 link 与主题 How to deploy a Win32 API application as an executable 一起编辑的,但这里是关于直接从 .vcxproj 文件和 没有 [=36] =] IDE.

为编译配置添加特定的 ClCompile 属性:

<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    ...
    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
        <ClCompile>
          <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
        </ClCompile>
    </ItemDefinitionGroup>
</Project>

可能的值在这里:runtimeLibraryOption 枚举 (去掉“rt”前缀)

rtMultiThreaded 0 : Multi-threaded (/MT)

rtMultiThreadedDebug 1 : Multi-threaded Debug (/MTd)

rtMultiThreadedDebugDLL 3 : Multi-threaded Debug DLL (/MDd)

rtMultiThreadedDLL 2 : Multi-threaded DLL (/MD)

有关 MT / MD 的更多信息可在此处找到:/MD, /MT, /LD (Use Run-Time Library)