gpt4 book ai didi

c++ - 在 Unity Builds 中创建文件范围的替代方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:16:21 24 4
gpt4 key购买 nike

我正在尝试使用 Unity Builds 来缩短 Windows 上 C++ 项目的构建时间。我遇到的几个问题之一是单一文件范围问题。

一旦所有源代码都包含在一个源文件中,它们就会共享相同的文件范围。使用相同名称的所有本地定义符号将重复并导致编译错误。

目前,我必须用文件后缀更改每个重复的名称以避免重复。但我认为可能有更好的解决方案。

最佳答案

我想分享我目前的解决方案。

  1. 生成 unity_build_source_<index>.cpp文件,定义一个 UNITY_BUILD宏和包装每个包含带有宏的源代码:

    // unity_build_souce file, automatically generated, do not edit manually.
    #define UNITYBUILD_CONCATENATE_DETAIL(x, y) x##y
    #define UNITYBUILD_CONCATENATE(x, y) UNITYBUILD_CONCATENATE_DETAIL(x, y)
    #define UNITYBUILD_MAKE_UNIQUE(x) UNITYBUILD_CONCATENATE(x, _UNITYBUILD_COUNTER)
    #define UNITY_BUILD

    // for each source code
    #define _UNITY_BUILD_COUNTER 1
    #include <path/to/source1.cpp>
    #undef _UNITY_BUILD_COUNTER

    #define _UNITY_BUILD_COUNTER 2
    #include <path/to/source2.cpp>
    #undef _UNITY_BUILD_COUNTER

    // ...
  2. 在源代码中,对重复的名称使用 UNITYBUILD_MAKE_UNIQUE 宏。

    #ifdef UNITY_BUILD
    #define a_duplicated_variable UNITYBUILD_MAKE_UNIQUE(a_duplicated_variable)
    #define ADuplicatedClass UNITYBUILD_MAKE_UNIQUE(ADuplicatedClass)
    #define aDuplicatedFunction UNITYBUILD_MAKE_UNIQUE(aDuplicatedFunction)
    #endif

    namespace
    {
    int a_duplicated_variable = 3;
    class ADuplicatedClass
    {
    public:
    ADuplicatedClass(int ){}
    };
    }

    void aDuplicatedFunction()
    {
    ADuplicatedClass c(a_duplicated_variable);
    }

    #ifdef UNITY_BUILD
    #undef a_duplicated_variable
    #undef ADuplicatedClass
    #undef aDuplicatedFunction
    #endif

我知道这个解决方案仍然很难看。与手动更改每个重复的符号相比,它使旧名称保持原样。

关于c++ - 在 Unity Builds 中创建文件范围的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37153092/

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