Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+的目录结构+;图书馆 我正在研究一个C++库。最后,我想让它在多个平台(至少Linux和Windows)上公开,并提供一些示例和绑定。工作进展顺利,但目前该项目相当混乱,仅内置和用于,而不是多平台_C++_Directory Structure_Automake - Fatal编程技术网

C+的目录结构+;图书馆 我正在研究一个C++库。最后,我想让它在多个平台(至少Linux和Windows)上公开,并提供一些示例和绑定。工作进展顺利,但目前该项目相当混乱,仅内置和用于,而不是多平台

C+的目录结构+;图书馆 我正在研究一个C++库。最后,我想让它在多个平台(至少Linux和Windows)上公开,并提供一些示例和绑定。工作进展顺利,但目前该项目相当混乱,仅内置和用于,而不是多平台,c++,directory-structure,automake,C++,Directory Structure,Automake,因此,我觉得应该进行清理。我想改进的第一件事是项目的目录结构。我想创建一个适合工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些结构。由于我仍将在VisualStudio中进行(大部分)编码,因此我还需要一个地方来保存我的VisualStudio项目和解决方案文件 我试图在谷歌上搜索“C++库目录结构”之类的术语,但似乎没有找到任何有用的东西。我找到了一些非常基本的指导方针,但没有明确的解决方案 在查看一些开源库时,我想到了以下几点: \mylib \mylib <sou

因此,我觉得应该进行清理。我想改进的第一件事是项目的目录结构。我想创建一个适合工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些结构。由于我仍将在VisualStudio中进行(大部分)编码,因此我还需要一个地方来保存我的VisualStudio项目和解决方案文件

我试图在谷歌上搜索“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
    ...
\mylib
\迈里布
\包括?或者只是混合.cpp和.h
\垃圾箱
\蟒蛇
\解放党
\计划
\包括?
自述
作者
...
我以前没有/几乎没有多平台开发/开源项目的经验,我很惊讶地发现,我找不到任何关于如何构建这样一个项目的好指南


一般来说,如何构建这样一个图书馆项目?推荐阅读什么?有一些好的例子吗?

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/
目录。我也不使用自动工具,而是更喜欢使用CMake。)


我给你的建议是,你应该选择一个对你(和你的团队)有意义的目录布局。为您选择的开发环境、构建工具和源代码管理做任何最明智的事情。

我认为实际上没有任何好的指导方针。大部分只是个人喜好。不过,某些IDE将决定您的基本结构。例如,VisualStudio将创建一个单独的bin文件夹,该文件夹分为调试和发布子文件夹。在VS中,当您使用不同的目标编译代码时,这是有意义的。(调试模式,发布模式。)

正如greyfade所说,使用对您有意义的布局。如果其他人不喜欢它,他们将不得不自己重组它。幸运的是,大多数用户都会对您选择的结构感到满意。(除非它真的很凌乱。)

我发现wxWidgets库(开源)就是一个很好的例子。它们支持许多不同的平台(Win32、Mac OS X、Linux、FreeBSD、Solaris、WinCE…)和编译器(MSVC、GCC、CodeWarrior、Watcom等)。您可以在此处看到树布局:


我真的可以推荐你使用CMake。。。它是用于跨平台开发的,它比automake灵活得多,使用CMake,您将能够在所有系统上使用自己的目录结构编写跨平台代码。

我最近遇到了一个很棒的约定,它可能会有所帮助:(也在上)

总之,第款规定:

PFL规定了几个应该出现在项目树的根目录。并非所有目录都是必需的,但它们有指定的用途,文件系统中的任何其他目录都不能担任这些目录之一的角色。也就是说,如果需要使用这些目录,则必须使用这些目录

其他目录不应出现在根目录中

build/
:不应将其视为项目源的一部分的特殊目录。用于存储短暂的生成结果。不能签入源代码管理。如果使用源代码管理,则必须使用源代码管理忽略列表忽略

src/
:主要可编译源位置。对于包含不使用子模块的已编译组件的项目,必须存在。 如果存在
include/
,则还包含私有头

include/
:公用标题的目录。他可能在场。对于不区分私有/公共头的项目,可以省略。对于使用子模块的项目,可以省略

tests/
:测试目录

examples/
:示例和示例目录

external/
:项目将使用但未作为项目一部分编辑的包/项目的目录

extras/
:包含项目的额外/可选子模块的目录

data/
:包含项目的非源代码方面的目录。这可能包括图形和标记文件

tools/
:包含开发实用程序(如构建和重构脚本)的目录

docs/
:项目文档目录

libs/
:主要项目子模块的目录


此外,我认为
extras/
目录是Python绑定的位置。

似乎与使用CMake时的版本相同,源代码外构建看起来很棒。