构建C ++应用程序(目录和文件夹)

时间:2014-11-24 10:45:31

标签: c++

我来自网络开发,我需要问C ++程序员他们如何管理基于模型的项目的目录?

我在Visual Studio C ++解决方案管理器中构建了我的项目,如下所示:

-> Header Files
   --> Models
       DatabaseEngine.interface.h

-> Resources

-> Source Files
   --> Models
       DatabaseEngine.cpp
   --> Application
       Core.cpp
       Bootstrap.cpp
   --> FrontController
       ---

我在Headers目录下创建了Model目录的完全副本,并附加了".interface"名称,因为它们是接口,它们的实际实现位于Sources下的镜像路径中

我有自定义类型,例如DBConnection,我不知道放在哪里?我应该把它们放在一个名为CustomTypes.cpp的文件中,还是应该将它们与相关的父模型/类/对象联系起来?

我关注的是会议和标准。

1 个答案:

答案 0 :(得分:5)

没有任何标准,C ++是一个非常开放的世界,你会看到; )

所有关于制作最适合您的方法,但通常从已经实验过的人那里获取建议不会受到伤害。 就个人而言,我试图遵循这个惯例

/ProjectName
    /src
        /libs <- Libraries go here
            /Models <- Assuming you want to make a library out of your models
                User.h
                User.cpp
                ... <- Putting header and implementations together is not a problem,
                       they should be edited in parallel oftentimes
                /Utilities <- Should your library grow, you can make it more modular
                              by creating subdirectories
                              (that could contain subdirectories, etc.)
                    DBConnection.h
                    DBConnection.cpp

        /apps <- define your applications here.
                 They probably rely on classes and functions defined in one or several of your libaries define above.
            /ApplicationA
                Core.h
                Core.cpp
                Bootstrap.h
                Bootstrap.cpp
    /resources
    /doc

    # Below are 'environment specific' folders.
    /vs <- Visual studio project files
    /xcode <- Xcode project files

说明

标题和实现

  • 头文件(.h,或.hpp,或者没有扩展名)确实定义了将在实现文件(.cpp)中实现的接口。尽管如此,为两者提供相同的基本名称是非常常见的,并且只能通过扩展(或不存在)来区分它们。添加额外的.interface部分可能不会对您造成太大影响,并且可能会混淆您的IDE(或其他工具),否则它们会将头文件与其实现文件相关联。
  • 出于同样的原因(不要混淆某些工具),将两个文件放在同一个文件夹中会更容易:它们无论如何都非常密切相关。
    • 此外,如果您以后需要更改文件夹结构(例如模块化),只有一个地方可以制作子文件夹(而不是方法中的两个)也会让生活变得更轻松。

自定义类型

C ++提供,供程序员定义自定义类型。在自己的头/实现文件对中定义自定义类型是很常见的。在您的情况下,DBConnection.h定义一个DBConnection类,其(非内联)方法将在DBConnection.cpp中实现。

Personnaly,我不会害怕为每种类型创建一对文件,这使得未来您和其他程序员更容易找到定义类型的文件。您可以通过制作子文件夹来管理越来越多的文件,这将迫使您模块化您的设计。

当然,有时你需要定义一个非常短的类,与另一个类紧密耦合。如果您认为它们之间的链接足够强大,则可以将这两个类包含在一对公共文件中。

扩展

它可能不是所有项目的关注点,但此目录结构在环境和构建管理方面是可扩展的。 将项目文件保存在顶层的单独文件夹中,并定义源外构建,允许为其他IDE创建项目文件。

如果您应该采用这种方式,这种层次结构也很容易适用于CMake构建管理。 CMakeLists.txt文件将放置在顶层(在ProjectName /下),此文件调用add_subdirectory(src),然后在ProjectName / src /等中调用CMakeLists.txt