TC.*_*TC. 72 c++ automake directory-structure
我正在开发一个C++库.最后,我想公开提供多个平台(至少Linux和Windows),以及一些示例和Python绑定.工作进展顺利,但目前该项目非常混乱,仅针对Visual C++构建,而不是多平台构建.
因此,我觉得清理是有序的.我想改进的第一件事是项目的目录结构.我想创建一个适合Automake工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些.由于我仍然会在Visual Studio中进行(大部分)编码,因此我需要在某处保留我的Visual Studio项目和解决方案文件.
我试图像谷歌"C++库目录结构"这样的术语,但似乎没有任何用处.我找到了一些非常基本的指导方针,但没有明确的解决方案
在查看一些开源库时,我想出了以下内容:
\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
...
Run Code Online (Sandbox Code Playgroud)
我以前没有/很少有多平台开发/开源项目的经验,我很惊讶我找不到关于如何构建这样一个项目的任何好的指导.
人们应该如何构建这样的图书馆项目?建议阅读什么?有一些很好的例子吗?
gre*_*ade 94
在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`
Run Code Online (Sandbox Code Playgroud)
它有点反映了传统的Unix文件系统,/usr
其中:
/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.
Run Code Online (Sandbox Code Playgroud)
当然,这些可能最终/usr/local
(这是GNU autoconf的默认安装前缀),并且它们可能根本不遵守这种结构.
没有严格的规则.我个人不这样组织事情.(./src/
例如,除了最大的项目之外,我完全避免使用目录.我也不使用autotools,而是选择CMake.)
我的建议是你应该选择一个对你(和你的团队)有意义的目录布局.为您选择的开发环境,构建工具和源代码控制做最合理的事情.
Gab*_*lli 19
我最近遇到了一个很棒的约定,它可能会有所帮助:The Pitchfork Layout(也在GitHub 上)。
总而言之,第1.3小节指出:
PFL 规定了几个应该出现在项目树根部的目录。并非所有目录都是必需的,但它们有指定的用途,文件系统中的任何其他目录都不能承担这些目录之一的角色。也就是说,如果需要使用这些目录,则必须使用这些目录。
其他目录不应出现在根目录中。
build/
: 不应被视为项目源的一部分的特殊目录。用于存储临时构建结果。不得签入源代码管理。如果使用源代码管理,必须使用源代码管理忽略列表忽略。
src/
: 主要可编译源位置。对于包含不使用子模块的已编译组件的项目,必须存在。在存在的情况下include/
,还包含私有标头。
include/
:公共标题的目录。可能存在。对于不区分私有/公共标头的项目,可以省略。对于使用子模块的项目,可以省略。
tests/
: 测试目录。
examples/
:示例和示例目录。
external/
:项目使用的包/项目的目录,但不作为项目的一部分进行编辑。
extras/
:包含项目的额外/可选子模块的目录。
data/
:包含项目非源代码方面的目录。这可能包括图形和标记文件。
tools/
:包含开发实用程序的目录,例如构建和重构脚本
docs/
: 项目文档目录。
libs/
:主要项目子模块的目录。
此外,我认为该extras/
目录是您的 Python 绑定应该去的地方。