代码之家  ›  专栏  ›  技术社区  ›  scubabbl

Visual Studio 2008下的C++项目结构

  •  3
  • scubabbl  · 技术社区  · 17 年前

    所以,我做Java已经很多年了,但现在我开始了一个C++项目。我正在努力确定建立上述项目的最佳实践。

    在项目中,你通常如何组织他们的代码?你是否以Java风格使用命名空间文件夹并以这种方式分解你的源代码?您是否将公共标头保存在include目录中以便于引用?

    我已经看到了这两种方法和其他提到的方法,但对于大型项目来说,什么是好的方法呢?

    此外,您如何处理应用程序结构中的资源/文件夹?对于最终的项目来说,安装一个 log 用于存储日志的文件夹,可能是 lib 库文件文件夹,可能是 data 数据文件夹,但如何在项目中管理这些部分?有没有一种方法可以定义它,这样当你构建解决方案时,它就会为你构建结构?或者,您是否只需进入内置的配置文件夹(Debug、Release等),手动构建文件结构,从而确保EXE文件预期找到的路径位置正确?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    11 年前

    我们倾向于将每个组件都作为一个解决方案,包含一个或多个项目(或子组件)和一个测试项目。测试项目包含所有单元测试。

    然后,我们根据模块和组件将解决方案排列成树,例如:

    //depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution
    

    然后,该解决方案将包含几个Visual Studio项目:

    //depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/Something
    //depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/SomethingElse
    //depot/MyProject/ASubSystem/AComponentOfTheSubSystem/ASubComponentWithAVSSolution/TestTheSolution
    

    树的深度可能更大,也可能更小,具体取决于组件/子组件的数量。我们还倾向于在子系统和子组件级别使用具有通用可重用内容的“通用”解决方案。

    然后,我们有一个子系统级的解决方案,将所有内容联系在一起以构建子系统。

    我们不使用或导出到“include”目录。我们让Visual Studio在沙盒中构建和链接。我们有一个单独的“发布”沙箱,以确保我们不会意外链接到错误的库。

        2
  •  1
  •   Community Mohan Dere    8 年前

    我有一个相关但不同的问题要问 here 也。我说nmake,但实际上它是任何构建系统:Scons、Bakefile、nmake、Ant、vcproj

    我通常按照应用程序或DLL中的“模块”来构造代码。我并不倾向于使用名称空间,但这并不意味着你不应该使用。

    在IDE中,我有这样的东西:

    /solution
       /prj1
          /headers
            /module1
            /module2
          /resource
          /source
            /module 1
            /module 2
          /test
       /prj2
          /headers
            /module1
            /module2
          /resource
          /source
            /module 1
            /module 2
          /test
    

    在文件系统上,我有这样的东西:

    /solution
        /prj1
           /bin
           /build
           /include
              /module1
              /module2
           /lib
           /res
           /src
              /module1
              /module2
           /test
        /prj2
           /bin
           /build
           /include
              /module1
              /module2
           /lib
           /res
           /src
              /module1
              /module2
           /test