首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild CL任务参数

MSBuild CL任务参数
EN

Stack Overflow用户
提问于 2020-02-09 16:01:12
回答 1查看 659关注 0票数 0

我试图使用MSBuild自动编译各种开放源码项目。

我想在编译管道中添加一个自定义CL.exe标志:将调用约定设置为fastcall (在cl.exe中,这是作为/Gr传递的)。这意味着默认的cdecl选项(/Gd)需要被覆盖。

我尝试设置一个MSBuild属性,但这没有起作用:

MSBuild.exe /p:PlatformToolset=v141 /p:Platform=x64 /p:Configuration=Release /p:CallingConvention=/Gr

我还想用几个其他标志来做这件事,这样就不会孤立于调用约定。我也希望在不编辑任何配置文件的情况下这样做,只使用CLI。

我怎样才能用MSBuild做到这一点呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-10 10:28:09

我尝试设置一个MSBuild属性,但这没有起作用。我怎样才能用MSBuild做到这一点呢?

请参阅msbuild 全局性质,命令行只接收msbuild属性,而CallingConvention不是msbuild属性。

我创建了一个C++项目,并在Debug/X86配置中更改了C/C++=>Advanced中的/Gd to /Gr,然后我看到如下所示:

代码语言:javascript
复制
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      ...
      <CallingConvention>FastCall</CallingConvention>
    </ClCompile>
    <Link>
      ...
    </Link>
  </ItemDefinitionGroup>

很明显,CallingConvention只是Item CLCompile的一个Metadata。这不是msbuild属性。所以我们不能像这样在msbuild命令行中设置它:msbuild /p:xxx

可能的解决办法

由于使用/Gr/Gd的唯一区别是元数据行:

因此,我认为我们可以在项目文件中复制一个ItemDefinitionGroup,并设置它们的条件如下:

代码语言:javascript
复制
  <!--ItemDefinitionGroup when using default /Gd-->
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' AND '$(UseFastCall)' == ''">
    <ClCompile>
     ...
    </ClCompile>
     ...
  </ItemDefinitionGroup>
  <!--ItemDefinitionGroup when using /Gr-->
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' AND '$(UseFastCall)' != ''">
    <ClCompile>
      ...
      <CallingConvention>FastCall</CallingConvention> <!--The only difference here.-->
    </ClCompile>
      ...
  </ItemDefinitionGroup>

然后,如果我们将值传递给自定义属性UseFastCallMSBuild.exe /p:PlatformToolset=v141 /p:Platform=x86 /p:Configuration=Debug /p:UseFastCall=true。它应该使用/Gr元数据。如果我们不将值传递给该属性,它将使用defaut /Gd。因此,解决办法是创建自定义属性来控制该行为。(它只适用于Debug\win32 32,您可能还需要对其他配置进行编辑。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60138514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档