如何覆盖 Visual Studio 2017 社区的编译命令
How to override compile command of Visual Studio 2017 Community
我想用一个简单的shell脚本覆盖默认的Visual Studio C++编译器。我想要的是捕获参数,例如文件名,并创建一些统计信息。但是,我想完全覆盖编译过程 - 也就是说,我想从我的 shell 脚本调用原始编译。
我用谷歌搜索,但我发现的只是如何在项目中执行预构建和后期构建脚本。那不是我想要的。
我想在全球范围内改变这一点。我该怎么做?
对于标准C++项目文件编译是通过调用名为ClCompile
的 MsBuild 目标来完成的。请注意,还有一个名为 ClCompile 的 MsBuild 项,它列出了实际使用的C++源文件,这可以通过在文本编辑器中打开.vcxproj轻松查看。因此,这个 ClCompile 项在 ClCompile 目标中使用,在那里它被传递给CL
任务,而任务又将调用实际的编译器可执行文件cl.exe
。此代码可以在您使用的工具集的 Microsoft.CppCommon.targets 文件中找到,用于在 64 位计算机上默认安装 VS2017 社区,即 C:\Program Files (x86(\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets。
这 3 个中的任何一个都可以用自定义版本覆盖,但是正如您认为已经只是替换磁盘上的 cl.exe 并不是最好的主意。
但是 CL 可以通过重写 CLToolExe 和 CLToolPath 属性来使用任何可执行文件。实际上:打开您的.vcxproj文件并添加
<PropertyGroup>
<CLToolExe>mycl.exe</CLToolExe>
<CLToolPath>c:pathtomycompilerstub</CLToolPath>
</PropertyGroup>
一直到最后,在导入Microsoft.Cpp.targets的行之后;mycl.exe将被调用而不是cl.exe。如果您希望在计算机上全局获得相同的效果,请将该属性组放在单独的 msbuild 文件中,并将其保存在例如 C:\Program Files (x86(\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\x64\ImportAfter\MyCustomImport.targets 中。将自动导入该目录中的任何目标文件。
作为替代方法,您可以覆盖 ClCompile 目标或 CL 任务。不过,这更复杂,例如,对于ClCompile,您将首先复制Microsoft.CppCommon.targets中找到的整个实现,然后添加所需的任何逻辑。优点是您可以直接访问例如源文件等,而无需解析命令行。例如,这将覆盖 ClCompile 和打印源文件,并将它们传递给自定义可执行文件:
<Target Name="ClCompile"
Condition="'@(ClCompile)' != ''"
DependsOnTargets="SelectClCompile">
<Message Text="All the sources = @(ClCompile)"/>
<Exec Command="mycustom.exe @(ClCompile)" />
... <!--rest of implementation copied from Microsoft.CppCommon.targets goes here-->
</Target>
同样,这需要放在项目文件的末尾或 ImportAfter 目录中以进行全局覆盖。
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- VS 2017 使用交叉编译器构建 x64 项目
- 点云库在VS 2019中不起作用,但在VS 2017中确实有效
- 在Visual Studio 2017中使用recursive_directory_iterator
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 智能感知不适用于Visual Studio 2017中的cmake项目
- VS 2017 社区收到链接器错误,但专业版没有
- 如何覆盖 Visual Studio 2017 社区的编译命令
- 如何在Visual studio 2017社区版中编译字节币源代码
- Microsoft Visual Studio 2017社区中的MQL4至C DLL
- 将Win32控制台项目模板添加到Visual Studio社区2017 15.5.2
- 减少可执行视觉Studo 2017社区的大小
- Visual Studio社区2017 Linker问题-Mariadb
- SFML 2.4.2 无法在 VS 2017 社区中绘制