gpt4 book ai didi

visual-studio - 链接来自另一个项目的所有 .obj 文件

转载 作者:行者123 更新时间:2023-12-01 03:54:15 29 4
gpt4 key购买 nike

我有一个用于包含嵌入式单元测试的可执行 C++ 项目。我已将测试移至另一个 (.dll) 项目,以便将它们与 VS Test Runner 一起使用,除了一堆 Unresolved external symbol 错误外,一切都很好。

如果我将 .exe 中的所有 .obj 文件链接到 .dll 中,事情似乎可以正常工作,但是它们很多,并且对它们进行硬编码非常“脏”,因为列表总是可以更改。

我尝试添加 .exe 项目作为引用并将“使用库依赖项输入”设置为 True,但它似乎没有做任何事情。

最佳答案

在检查 Microsoft.CppBuild.targets 后,我发现带有 UseLibraryDependencyInputs 的项目的 .obj 文件设置为 true,这对应于在 VS 中检查“使用库依赖项输入”,仅当项目是 StaticLibrary 时才包括在内。

解决此问题的一种快速而肮脏的方法是覆盖任务 ResolvedLinkObjs在 .vcxproj 中,稍作修改。

对此进行测试,我能够链接我引用的项目中的所有 .obj 文件。

我换了ItemNameTargetOutputs MSBuild 任务输出到 "ProjectReferenceToLink"并添加 ConfigurationType=StaticLibrary至已通过 Propertie s。将 .exe 项目视为 StaticLibrary 的副作用虽然调用这个目标并不是很明显,但我没有注意到任何不好的地方。

  <Target Name="ResolvedLinkObjs" DependsOnTargets="$(CommonBuildOnlyTargets)">
<MSBuild Projects="@(_MSBuildProjectReferenceExistent)"
Targets="GetResolvedLinkObjs"
BuildInParallel="$(BuildInParallel)"
Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration); %(_MSBuildProjectReferenceExistent.SetPlatform); ConfigurationType=StaticLibrary"
Condition="'%(_MSBuildProjectReferenceExistent.Extension)' == '.vcxproj' and '@(ProjectReferenceWithConfiguration)' != '' and '@(_MSBuildProjectReferenceExistent)' != ''"
ContinueOnError="!$(BuildingProject)"
RemoveProperties="%(_MSBuildProjectReferenceExistent.GlobalPropertiesToRemove)">
<Output TaskParameter="TargetOutputs" ItemName="ProjectReferenceToLink" />
</MSBuild>
</Target>

这可以很容易地修改为只从一个项目中获取 .objs。更干净的方法可能还包括不覆盖这样的内置目标,而是将其插入到链中。

关于visual-studio - 链接来自另一个项目的所有 .obj 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18753764/

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