2016-05-11 8 views
1

Unityビルドを使用して、Windows上のC++プロジェクトのビルド時間を短縮しようとしています。私が会ったいくつかの問題の1つは、ファイルスコープの問題です。Unityビルドでファイルスコープを作成する別の方法

すべてのソースコードが単一のソースファイルに含まれると、それらはすべて同じファイルスコープを共有します。同じ名前を使用してローカルに定義されたシンボルはすべて重複し、コンパイルエラーが発生します。

現在、重複を避けるために、重複した各名前をファイルの接尾辞で変更する必要があります。しかし、私はより良い解決策があるかもしれないと思います。

答えて

0

私の現在の解決策を共有したいと思います。 unity_build_source_<index>.cppファイルの生成に

  1. UNITY_BUILDマクロを定義し、各ラップマクロをソースコードを含む:複製され名にUNITYBUILD_MAKE_UNIQUEマクロを使用して、ソースコードで

    // 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. を。

    #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 
    

私は、このソリューションは、まだ格好悪いです知っています。複製された各シンボルを手動で変更するのと比較して、古い名前はそのままの形で保持されます。

関連する問題