如何布局C++代码:Visual Studio 2010 中的命名空间和类似文件名
How to layout C++ code: namespaces and similar file names in visual studio 2010
这更像是一个一般性的问题,因为我在网上找到的关于如何最好地组织源代码的信息相对较少。
我目前布置代码的方式是让 VS 中的一个项目编译一个库,然后是两个控制台应用程序项目,一个用于单元测试,另一个用于执行库中的代码。
在主项目中,我有一个名为 src 的文件夹,其中包含我的 src 代码。然后将此源代码结构化为各种文件夹,每个文件夹包含 .h 和 .cpp 文件。文件名与类名匹配。文件夹与命名空间匹配,因此每个文件夹都位于其自己的命名空间中。
我认为这是一种非常明智的方法,直到我发现如果两个.cpp文件具有相同的名称(尽管在不同的文件夹和命名空间中),则Visual Studio 2010在这种方法下会打嗝,因为所有.obj文件都放在同一个临时目录中(调试或发布)。
这让我想知道,因为维护大量命名空间和子命名空间的目的肯定是使您能够拥有相同名称的类和文件。一些谷歌搜索提出了单独选择冲突文件并将.obj文件放在不同位置的解决方案,但有些暗示性能较差,这似乎确实是一种奇怪的方法。
所以我只是想知道,这不是一个明智的布局吗?还是人们通常将每个文件夹编译成一个静态库,然后链接它们?还是您只是维护不同的文件名?然后,您是否继续将文件名与类名匹配?因为如果你这样做,你也不会真正需要子命名空间,因为整个项目可能只在一个命名空间中......
我想知道,我思考...不确定这个问题是否足够具体。我想我的直接问题(假设布局有些合理)是如何绕过冲突的 obj 文件?我只是在考虑在维护类名的同时重命名文件。但我不太喜欢这个解决方案。
谢谢(对不起,长问题)
附言源文件夹应该与 Linux 下的 gcc 兼容
IDE 通常允许您按逻辑排列文件。(Visual Studio 和 XCode 至少都允许您创建 heirachal 组来排列源文件,这与文件在磁盘上的位置不对应)。
由于大多数 IDE 将所有源文件编译到链接步骤的公共中间文件夹中,因此任何名称相同的源文件都可能生成冲突,其中要编译的第二个文件将覆盖上一个编译的 .o 或 .obj。
因此,我倾向于采用务实的方法:单个目标(静态库,dylib,exe)的所有文件都包含在单个文件夹中。特定于平台或特定于功能的文件位于特定的子文件夹中,因此只需一次添加(或删除)一个文件文件夹,即可轻松地为不同的平台/配置重建项目。这确实(事后看来)似乎是有效使用文件系统的最有用方法。
每次单个库变得过于繁琐时,我都会拆分一个新的静态库,而不是创建一个深层的子结构。
这很好地映射到 Visual Studio 和 XCode 等 IDE 的基本项目结构,这些 IDE 倾向于暗示其向导的最佳实践:一个项目文件夹,包含多个目标文件夹,每个目标文件夹包含其源文件。
我设置
Properties -> C/C++ -> Output Files -> Output File Name
自
V:%(Directory)$(PlatformName)_$(ConfigurationName)_%(Filename).obj
假设项目位于驱动器V
上,则 OBJ 文件最终位于源旁边(还不知道是否有宏)。
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- clang 3.3 可以在 VS 2010 中使用命名空间编译代码
- 无法从 VS 2010 SP1 中的 C# 访问C++类/命名空间
- 我如何使用这个系统?. Net命名空间导入到Visual Studio 2010 c++项目中
- 如何布局C++代码:Visual Studio 2010 中的命名空间和类似文件名
- 在 Visual Studio 2010 C++ 中包含命名空间