代码之家  ›  专栏  ›  技术社区  ›  Mikhail

将VisualStudioC++生成的中间文件移动到另一台机器

  •  0
  • Mikhail  · 技术社区  · 5 年前

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

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

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

    我为测试项目所做的尝试: 1将所有中间文件从生成服务器复制到本地计算机 2将所有中间文件的时间戳更新为当前时间 三。将所有*.tlog文件中的所有路径从特定于服务器更改为特定于本地

    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)
    

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

    好的,我试着简单地替换PCH文件中的路径,就像替换.tlog文件一样。但是,即使我没有更改任何文件,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。

    没有什么 .

    0 回复  |  直到 5 年前
        1
  •  2
  •   Matthieu Brucher    5 年前

    我们有相似的东西。我们只有VS解决方案的相对路径,然后我们还存储具有适当时间戳的(empty/bogus).tlog文件。我们只存储库,而不存储中间对象文件,因此当有人将文件更改为库时,我认为我们将重建完整的库。但是我们对预编译头没有任何问题,它们都是最新的,而且我们有相同的标志,所以我认为您的构建服务器和本地构建之间的设置不同。我们没有这个问题,因为VS标志来自我们的makefile,所以一切都是一致的。

    最大的缺点是,当我们迁移到CMake时,我们将有一场艰苦的战斗来复制层次结构,就像我们为定制构建所做的那样。