gpt4 book ai didi

c++ - 将 Visual Studio C++ 构建的中间文件移动到另一台机器

转载 作者:行者123 更新时间:2023-11-30 03:18:24 25 4
gpt4 key购买 nike

我们正在寻找一种方法来加速本地 C++ 构建。我们有一个简单的想法。我们定期在构建服务器上构建我们的解决方案。这个构建是增量的:当我们推送新的更改时,只重建解决方案的必要部分。快速、方便。

如果我们将 VS 生成的所有中间文件从构建服务器复制到我们的本地机器会怎么样?理想情况下,VS 应该在这些中间文件之上生成增量构建。快速、方便。

问题是,我们的构建服务器和本地机器使用不同的解决方案路径。这不适用于增量构建。

我在一个测试项目中尝试过的:1.将所有中间文件从构建服务器复制到本地机器2.更新所有中间文件的时间戳为当前时间3. 将所有 *.tlog 文件中的所有路径从特定于服务器更改为特定于本地

第一印象很好:VS 报告项目是最新的,没有要构建的东西,是的!但是,如果我更改单个文件,VS 会尝试重新使用它已有的预编译 header 来重建它。我有很多这样的错误:

1>e:\dev\prod3\shared\sdk\src\common\tblockalloc.h(18): error C2995: 'BlockManagerSPtr GetBlockManager(void)': function template has already been defined (compiling source file Requests.cpp)
1>d:\agent-home\xml-data\build-dir\ama-actd-job1\shared\sdk\src\common\tblockalloc.h(15): note: see declaration of 'GetBlockManager' (compiling source file Requests.cpp)

似乎混淆了相同的符号出现在不同路径的标题中。

好的,我尝试像替换 .tlog 文件一样简单地替换 PCH 文件中的路径。但是即使我不更改任何文件,VS 也会立即认为该项目已过时。这是令人惊讶的,因为我认为它不会查看文件本身,而只会观察它们的时间戳。无论如何,它随后吐出大量这样的错误:

1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'StdCall(/Gz)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'CDecl(/Gd)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'general PM representation(/vm[smv])' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'support for new floating-point model (/FP)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'vtordisp(/vd[012])' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'DLL library (/MD)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4652: compiler option 'Debug static MT library (/MTd)' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4653: compiler option 'Optimizations (one or more of /Oawstgp[y]) or debug checks (one or more of /GZ, /RTCcsu)' inconsistent with precompiled header; current command-line option ignored
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): warning C4653: compiler option 'For loop scope conformance (/Zc:forScope)' inconsistent with precompiled header; current command-line option ignored
1>e:\dev\prod3\shared\app.restserver\src\constants.cpp(1): error C2855: command-line option '/Zc:threadSafeInit' inconsistent with precompiled header

它似乎不喜欢我乱用 PCH。

所以在这一点上我有点卡住了。我希望找到一些关于如何重用 Visual Studio 的构建项目来实现简单的增量构建的信息,但实际上我什么也没找到。什么

有可能吗?有人试过吗?

最佳答案

我们有类似的东西。我们只有 VS 解决方案的相对路径,然后我们还存储具有适当时间戳的(空/伪).tlog 文件。我们只存储库,不存储中间目标文件,所以当有人为库更改文件时,我认为我们重建了完整的库。但是我们的预编译 header 没有丝毫问题,它们是最新的并且我们有相同的标志,所以我认为您的构建服务器和本地构建之间的设置不同。我们没有这个问题,因为 VS 标志来 self 们的 Makefile,所以一切都是一致的。

最大的缺点是,当我们迁移到 CMake 时,我们将面临重现层次结构的艰苦战斗,就像我们为自定义构建所做的那样。

那么也许您应该使用像 Incredibuild 这样的现成产品。

关于c++ - 将 Visual Studio C++ 构建的中间文件移动到另一台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54769385/

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