C ++库的目录结构
我正在研究C ++库。 最终,我想将其公开提供给多个平台(至lessLinux和Windows),以及一些示例和Python绑定。 工作进展很好,但目前这个项目相当混乱,完全是为了Visual C ++而build立的,而不是多平台的。
所以,我觉得一个清理是为了。 我想改善的第一件事是项目的目录结构。 我想创build一个适用于Automake工具的结构,以便在多个平台上轻松编译,但是我以前从未使用过这些结构。 由于我仍将在Visual Studio中完成(大部分)编码,所以我需要在某处保留我的Visual Studio项目和解决scheme文件。
我试图谷歌的条款,如“C ++库目录结构”,但似乎没有用。 我发现了一些非常基本的指导方针,但没有明确的解决scheme
在查看一些开源库时,我想出了以下内容:
\mylib \mylib <source files, read somewhere to avoid 'src' directory> \include? or just mix .cpp and .h \bin <compiled examples, where to put the sources?> \python <Python bindings stuff> \lib <compiled library> \projects <VC++ project files, .sln goes in project root?> \include? README AUTHORS ...
我对于多平台开发/开源项目没有多less经验,对于如何构build这样一个项目我找不到任何好的指导方针感到非常惊讶。
人们应该如何构build这样一个图书馆项目? build议阅读什么? 有一些很好的例子吗?
Unix库中非常普遍的一件事情是,它们的组织结构如下:
./ Makefile and configure scripts. ./src General sources ./include Header files that expose the public interface and are to be installed ./lib Library build directory ./bin Tools build directory ./tools Tools sources ./test Test suites that should be run during a `make test`
它有点反映了/usr
下的传统Unix文件系统:
/usr/src Sometimes contains sources for installed programs /usr/include Default include directory /usr/lib Standard library install path /usr/share/projectname Contains files specific to the project.
当然,这些可能以/usr/local
(这是GNU autoconf的默认安装前缀)结束,它们可能完全不符合这个结构。
没有硬性规定。 我个人不会这样组织事情。 (除了最大的项目之外,我完全避免使用./src/
目录,例如,我也不使用autotools,宁愿使用CMake。)
我的build议是,你应该select一个适合你 (和你的团队)的目录布局。 对于您select的开发环境,构build工具和源代码控制,做一些最明智的select。
我不认为实际上有任何好的指导方针。 大部分只是个人喜好。 但是,某些IDE将决定您的基本结构。 例如,Visual Studio将创build一个单独的bin文件夹,该文件夹分为Debug和Release子文件夹。 在VS中,当你使用不同的目标来编译代码时,这是有意义的。 (debugging模式,发布模式。)
正如greyfade所说,使用一个对您有意义的布局。 如果别人不喜欢,他们将不得不自己重组。 幸运的是,大多数用户会对你select的结构感到满意。 (除非真的很混乱。)
我发现wxWidgets库(开源)是一个很好的例子。 它们支持许多不同的平台(Win32,Mac OS X,Linux,FreeBSD,Solaris,WinCE …)和编译器(MSVC,GCC,CodeWarrior,Watcom等)。 你可以在这里看到树的布局: