Shi*_*Yip 8 c++ version-control directory-structure code-organization project-organization
组织项目目录的一种流行方式或多或少是这样的:
MyLib
+--mylib_class_a.h
mylib_class_a.cpp
mylib_library_private_helpers.h
mylib_library_private_helpers.cpp
MyApp
+--other_class.h
other_class.cpp
app.cpp
app.cpp:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Run Code Online (Sandbox Code Playgroud)
同一个库的所有.h和.cpp文件都在同一目录中.为避免名称冲突,文件名通常是公司名称和/或库名称的前缀.MyLib将位于MyApp的标题搜索路径等中.我不是前缀文件名的粉丝,但我喜欢查看#include并确切知道头文件所属的位置.我不讨厌这种组织文件的方法,但我认为应该有更好的方法.
自从我开始一个新项目以来,我想征求一些目录组织的想法.目前我喜欢这个目录结构:
ProjA
+--include
+--ProjA
+--mylib
+--class_a.h
+--app
+--other_class.h
+--src
+--mylib
+--class_a.cpp
library_private_helpers.h
library_private_helpers.cpp
+--app
+--other_class.cpp
app.cpp
util.h
app.cpp:
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
Run Code Online (Sandbox Code Playgroud)
.cpp文件和私有(仅对直接库可见).h文件存储在src目录下(src有时称为lib).公共头文件被组织成一个项目/ lib目录结构并包含在内<ProjectName/LibraryName/headerName.h>.文件名不带任何前缀.如果我需要将MyLib打包以供其他团队使用,我可以简单地更改我的makefile以复制相应的二进制文件和整个include/ProjA目录.
一旦将文件检入源代码控制并且人们开始处理它们,将很难更改目录结构.最好在开始时把它弄好.
有经验组织这样的源代码的人吗?你不喜欢什么吗?如果你有更好的方法,我非常想听听它.
嗯,这完全取决于这些项目有多大.如果您只有几个文件,那么将它们全部打包在一个文件夹中.
当你没有很多文件需要管理时,太多的文件夹在我看来有点过分.当你只有几个文件时,它会很烦人地进出文件夹.
此外,这取决于谁在使用这些东西.如果你正在编写一个库并且它将被其他程序员使用,那么将他们想要使用的头文件组织成一个包含文件夹是很好的.如果您要创建多个库并将它们全部发布,那么您的结构可能会起作用.但是,如果它们是独立的库,并且开发并非全部一起完成并且它们在不同时间进行版本化和发布,那么您最好坚持将一个项目的所有文件放在一个文件夹中.
事实上,我会说将所有内容保存在一个文件夹中,直到你找到一个无法管理的点,然后重新组织成一个聪明的方案,将源分成你已经完成的文件夹.您可能知道如何根据遇到的问题进行组织.
KISS通常始终是编程的解决方案 - >尽可能简化一切.