【发布时间】:2017-12-23 22:59:49
【问题描述】:
我一直在重新设计我的自定义 VC++ 构建以与新的 TFS 2015 构建解决方案兼容。
问题是运行 msbuild。我可以发布一个简化版本,但我的解决方案包含两个项目:
1 Makefile 项目旨在构建所需的所有库,以及 1 个 .exe 项目。
我在 .exe 项目中有对 makefile 项目的引用,因此如果需要,.exe 的构建会强制库的构建。
我们看到的问题是,当我们使用解决方案的 msbuild 进行重建时,它首先重建库,然后当它到达 .exe 时,它会清理库项目,导致一些重建的文件被删除然后阻止.exe文件的链接,因为.lib文件被删除了。
为什么要再次清理 makefile 项目?好像到了.exe项目后,重新解析了依赖,不知道库项目已经重建了。
提前致谢。拉里
【问题讨论】:
-
所以你运行
msbuild some.sln /t:Rebuild,结果是干净的 M/build M/clean M/clean E/build E(其中 M 代表 Makefile 项目,E 代表 exe 项目?正是这些步骤? -
我们得到一个 M/Rebuild,然后当它进入 .exe 项目时,它执行了 M/Clean、M/Build,然后是 E/Rebuild。
-
这似乎没有反映您在问题中陈述的事情之一:如果 M/Build 出现在 E/Rebuild 之前,那么在 M 被构建之后,E 怎么还会有链接问题?
-
我们的问题是,当它进入 exe 项目时,它实际上正在再次重建 M 项目(通过 Clean and Build)。 Rebuild 对我们来说与 clean and build 不同,rebuild 有一些额外的要求。我们的最佳解决方案是在 M 项目第一次重建后不再对其进行任何操作。我们将进行多处理器构建,最终将有超过 1000 个 E。
-
顺便说一下,devenv 的工作方式似乎有所不同。