gpt4 book ai didi

c++ - 为所有项目设置 OutDir 和 IntDir

转载 作者:行者123 更新时间:2023-12-05 02:45:12 24 4
gpt4 key购买 nike

我正在尝试为 OutDir 设置默认位置和 IntDir供解决方案中的所有项目使用。如:<OutDir>$(SolutionDir)bld\$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>

当我在 Directory.Build.props 中设置它时文件,它在 Visual Studio 属性对话框中看起来没问题;但是当我构建时,$(ProjectName)部分是空的。这告诉我在 Directory.Build.props 中读取 OutDir 时此宏不可用。

我尝试将其添加到 Directory.Build.targets文件,它似乎被完全忽略了。

另一个目标是在此初始更改后不修改任何 vcxproj 文件。新项目会自动继承这些设置。

这可能吗?也许我将设置放在文件中的错误位置/顺序...?

这是 Directory.Build.props 的一个片段:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>

<!-- Define macros for easy and consistent access to various parts of the tree -->
<PropertyGroup Label="UserMacros">
<GslInclude>$(SolutionDir)packages\Microsoft.Gsl.0.1.2.1\build\native\include</GslInclude>
<mySrcDir>$(SolutionDir)src\</mySrcDir>
<myBldDir>$(SolutionDir)bld\</myBldDir>
<myBldIntDir>$(SolutionDir)bld_int\</myBldIntDir>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="GslInclude"> <Value>$(GslInclude)</Value> </BuildMacro>
<BuildMacro Include="mySrcDir"> <Value>$(mySrcDir)</Value> </BuildMacro>
<BuildMacro Include="myBldDir"> <Value>$(myBldDir)</Value> </BuildMacro>
<BuildMacro Include="myBldIntDir"> <Value>$(myBldIntDir)</Value> </BuildMacro>
</ItemGroup>

<!-- Platform Toolset, Windows SDK -->
<PropertyGroup Label="Globals">
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>

<!-- Default Compiler settings -->
<ItemDefinitionGroup>
<ClCompile>
<!-- .... -->
</ClCompile>
</ItemDefinitionGroup>

<!-- Default Folders for target output -->
<PropertyGroup>
<OutDir>$(myBldDir)$(Platform)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>$(myBldIntDir)$(Platform)\$(ProjectName)\$(Configuration)\</IntDir>
</PropertyGroup>

</Project>

当然,我只是删除了所有 <OutDir><IntDir> proj 文件中的设置。

我还希望能够根据 Visual Studio 的版本为设置设置条件。我们的一些开发人员正在使用 VS2017 和较旧的 ToolSet;有些人正在使用 VS2019 和最新的....

最佳答案

感谢那些为此提供帮助的人。我得到它的工作 - 至少我的主要目标是为构建“输出”建立一个预定义的位置。

从这里引用信息:https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019并在 VS Prop 文件中四处搜索,我找到了一个在此过程早期设置的宏“MSBuildProjectName”。

我在构建树的根目录中创建了一个 Directory.Build.props 文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
</ImportGroup>

<!-- Define macros for easy and consistent access to various parts of the tree -->
<PropertyGroup Label="UserMacros">
<GslInclude>$(SolutionDir)packages\Microsoft.Gsl.0.1.2.1\build\native\include</GslInclude>
<myBldDir>$(SolutionDir)bld\</myBldDir>
<myBldIntDir>$(SolutionDir)bld_int\</myBldIntDir>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="GslInclude"> <Value>$(GslInclude)</Value> </BuildMacro>
<BuildMacro Include="myBldDir"> <Value>$(myBldDir)</Value> </BuildMacro>
<BuildMacro Include="myBldIntDir"> <Value>$(myBldIntDir)</Value> </BuildMacro>
</BuildMacro>
<!-- etc .... -->
</ItemGroup>

<!-- Platform Toolset, Windows SDK -->
<PropertyGroup Label="Globals">
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Label="Configuration">
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>

<PropertyGroup>
<IntDir>$(myBldIntDir)$(Platform)\$(MSBuildProjectName)\$(Configuration)\</IntDir>
<OutDir>$(myBldDir)$(Platform)\$(MSBuildProjectName)\$(Configuration)\</OutDir>
</PropertyGroup>

<!-- lots more .... -->
</Project>

此文件中的设置会影响文件夹结构中位于“下方”的所有项目。如果子文件夹需要不同的值,请将 Directory.Build.props 添加到导入“父” Prop 文件的文件夹(它可能在上面的几层):

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

<ImportGroup Label="PropertySheets">
</ImportGroup>

<PropertyGroup>
<IntDir>$(myBldIntDir)$(Platform)\Tests\$(MSBuildProjectName)\$(Configuration)\</IntDir>
<OutDir>$(myBldDir)$(Platform)\Tests\$(MSBuildProjectName)\$(Configuration)\</OutDir>
</PropertyGroup>

</Project>

“子” Prop 文件中的设置会覆盖其父项中的任何设置。

一旦我删除了所有 <OutDir><IntDir> XML 项目文件中的元素、“输出目录”和“中间目录”设置以常规字体显示(不是粗体表示它不是继承的),当然,当我构建时,所有内容都会进入合并的文件夹树;远离源头。最酷的是:新项目将自动填充这些新的默认设置。

注意:@dxiv 指出某些设置可能更挑剔并且需要更多工作。

关于c++ - 为所有项目设置 OutDir 和 IntDir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66068782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com