Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Unity构建中创建文件作用域的其他方法 我试图使用Unity构建来缩短Windows上C++项目的构建时间。我遇到的几个问题之一是单文件范围问题_C++_Build - Fatal编程技术网

在Unity构建中创建文件作用域的其他方法 我试图使用Unity构建来缩短Windows上C++项目的构建时间。我遇到的几个问题之一是单文件范围问题

在Unity构建中创建文件作用域的其他方法 我试图使用Unity构建来缩短Windows上C++项目的构建时间。我遇到的几个问题之一是单文件范围问题,c++,build,C++,Build,一旦所有源代码都包含在单个源文件中,它们就共享相同的文件范围。所有使用相同名称的本地定义符号都将重复,并导致编译错误 目前,我必须用文件后缀更改每个重复的名称,以避免重复。但我认为可能有更好的解决方案。我想与大家分享我目前的解决方案 在生成unity\u build\u source\u.cpp文件时,定义一个unity\u build宏,并用宏包装每个包含源代码: // unity_build_souce file, automatically generated, do not edit m

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


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

我想与大家分享我目前的解决方案

  • 在生成
    unity\u build\u source\u.cpp
    文件时,定义一个
    unity\u 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
    
    // ...
    

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

    我想分享我当前的解决方案

  • 在生成
    unity\u build\u source\u.cpp
    文件时,定义一个
    unity\u 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
    
    // ...
    
  • 我知道这个解决方案仍然很难看。与手动更改每个重复的符号相比,它使旧名称保持原样