在Unity Builds中创建文件范围的替代方法
Alternative ways to create file scope in Unity Builds
我正试图使用Unity Builds来缩短Windows上c++项目的构建时间。我遇到的几个问题之一是单文件作用域问题。
一旦所有源代码都包含在单个源文件中,它们就共享相同的文件范围。所有使用相同名称的本地定义符号都将重复,并导致编译错误。
目前,我必须用一个文件后缀来更改每个重复的名称,以避免重复。但我认为可能有更好的解决方案。
我想分享我当前的解决方案。
-
在生成
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 // ...
-
在源代码中,对重复的名称使用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++从实例范围之外的分隔 std::function 变量调用
- 通过函数指针定义类范围之外的方法
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- C++中静态方法的局部变量范围
- 在 C++20 计算范围内相邻对的最简洁明了的方法是什么?
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 是否可以在基于范围的 for 循环中使用模板化的开始/结束方法
- 是否有一种方法可以根据派生的可能性值范围限制对象参数
- C 将方法和字段带入外部范围,而无需明确的参考
- 是否有一种方法可以避免标头文件中使用的constexpr函数输入全局范围,而无需额外的名称空间
- 使用范围V3视图来实现begin()/end()方法
- 在嵌套名称空间范围中使用名称空间的正确方法
- 使用其范围版本从容器中删除元素的最佳方法
- C++ |方法范围指针管理
- 用辅助方法范围范围的问题来操纵字符串
- Java,这是可能的吗?自动方法范围跟踪,就像C++中的宏一样
- 游戏循环中的可变内存方法范围
- 正在从方法范围复制char*
- 从c++调用qml - javascript中的方法.范围的问题