Visual Studio VC 2010 C++ -组织源文件

mccptt67  于 2022-12-30  发布在  其他
关注(0)|答案(5)|浏览(239)

我有一些关于如何在VC 2010 C++项目中组织源文件的问题。包含的默认过滤器不足以作为最终的,我会有很多的.cpp和.hpp文件,所以它会很乱。我想创建一个文件夹在项目的根称为“源”,然后创建文件夹内的“源”的各种源文件类别,我'我想使用。当我右键单击解决方案时,我只能获得添加筛选器的选项,而不能获得添加文件夹的选项。我可以在Windows资源管理器中手动创建文件夹,然后将其包含在内,但这样我就无法添加筛选器了。有没有办法在添加新文件夹(不使用Windows资源管理器)的同时仍然使用筛选器?
另外,是否有类似于$(CURDIR)的东西可以用来包含源文件夹,而不需要绝对路径?

y4ekin9u

y4ekin9u1#

您可能对Visual Studio如何处理C++文件感到有些困惑,但这没关系,因为文档很糟糕。与C#或Java不同,项目中文件的排列与磁盘上文件的排列无关,文件和文件夹实际上并不在项目中;该项目只列出文件和文件夹的名称和路径,这些文件和文件夹必须已经存在于您的磁盘上。
通常,您创建文件夹的布局,源文件位于这些文件夹中。您可以在Visual Studio * 外部 * 执行此操作。您还可以创建项目文件。当您向项目“添加文件”时,您所做的只是告诉项目在磁盘上的何处查找该文件。
让我们来看一个具体的例子,我将向你展示我是如何组织它的。假设你正在制作一个名为SuperCalc的图形计算器程序。你将有一个Source文件夹,然后在Source中创建文件夹来保存不同的文件。假设你创建的文件夹是:

  • 第一个月
  • SuperCalc\Source\Math
  • SuperCalc\Source\Math\Matrix
  • SuperCalc\Source\Output

Source有3个子目录:InputOutputMathMath子目录有一个名为Matrix的子目录。您将在Input、Math、Matrix和Output中拥有.cpp文件。您将使用Windows资源管理器或命令提示符创建这些目录(文件夹)。
现在,您还需要创建一个解决方案文件(SuperCalc.sln)和一个项目文件(SuperCalc.vcxproj&SuperCalc.vcxproj.filters)。请在Visual Studio中执行此操作。通常,项目文件位于解决方案目录的子文件夹中;这将由Visual Studio自动为您完成。为解决方案文件选择一个位置--它应该与源代码在同一目录结构(文件夹树)中的某个位置。我建议将它放在Source目录旁边,在:

  • SuperCalc\Build

进入VS,选择File > New > Project > Visual Studio Solutions > Blank Solution File,给予解一个名字(可能是“SuperCalc”)和一个位置(我们刚刚在SuperCalc\Build目录中选择的位置),它会为你创建一个解文件。
现在在解决方案资源管理器中右键单击解决方案(“Solution SuperCalc,0 projects”),然后选择Add > New Project。选择一个名称--这将是您的程序可执行文件的名称,如“SuperCalc”!选择Win32Win32控制台应用程序(这是一个DOS控制台程序)或Win32 Project(这是一个普通的Windows GUI程序)。通常我会单击应用程序设置来进行一些重要的更改:首先,我选择空项目是因为我不希望Visual Studio为我创建文件和代码,除非我告诉它这样做。当它按照我想要的方式设置好后,我单击“完成”。
现在,您已经拥有了由Visual Studio创建的解决方案文件和项目。您还拥有了在Visual Studio之外创建的源代码,或者至少是源代码所在的目录结构(文件夹树)。现在是时候将这两件事连接在一起了。
如果需要,可以将所有源文件列到项目的源文件过滤器中,即使它们来自不同的目录(输入、矩阵等),文件在磁盘上的位置和它们在项目中的外观之间没有必要的关系。但是如果你有很多文件,如果你创建“子过滤器”,即源文件过滤器内部的过滤器,那就更容易了,并将Source的子文件夹的名称给予它们。这样,您就可以将磁盘目录的结构复制到项目文件中。
右键单击“SuperCalc”项目的源文件过滤器,选择Add〉AddNewFilter,给予其命名为Input(SuperCalc\Source目录的第一个)。同时创建过滤器MathOutput。右键单击Math过滤器并选择Add〉Add New Filter。创建一个名为Matrix的子过滤器(在Math中)。现在您有了这些 * 过滤器 *:

SuperCalc
      Source Files
         Input
         Math
            Matrix
         Output

这与你之前创建的目录(文件夹)类似。* 这纯粹是一种方便人类的安排 *。Visual Studio并不理解它的任何特殊之处。如果你只是告诉VS“添加一个文件”,它不会把文件放在正确的过滤器中。你必须告诉它把它放在哪里。
若要添加或创建.cpp文件,请选择与.cpp文件所在目录对应的筛选器名称。因此,若要添加或创建SuperCalc\Source\Math\Matrix\matrix_multiply.cpp文件,请在解决方案资源管理器中右键单击Matrix筛选器。并选择添加〉添加新文件或添加现有文件。(Add Existing File适用于已经编写matrix_multiply. cpp并且只想告诉项目它的位置的情况。)使用该对话框导航到Source\Math\Matrix目录。对整个程序中的所有源文件重复此过程。

您还遇到了这样的问题:“是否有类似于$(CURDIR)的东西可以用来包含源文件夹,而无需绝对路径?”您很幸运:Visual Studio项目不使用绝对路径!它们使用相对路径。项目文件存储从包含.vcxproj文件的目录到包含源文件的目录所需的相对路径。因此,如果您在我建议的位置(SuperCalc\Build目录)创建了SuperCalc.slnSuperCalc.vcxproj,并将.cpp文件添加到source子目录中,你可以使用记事本查看SuperCalc.vcxproj文件,你会看到类似这样的行:

<ClCompile Include="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />

因为没有绝对路径,你可以把整个SuperCalc目录树移到其他地方,它仍然可以工作,不需要像$(CURDIR)这样的环境变量。
最后要知道的一件事:因为你把你的源文件放在多个目录中,你可能会遇到#include ing头文件,.h或.hpp文件的问题。你必须告诉编译器你的头文件所在的目录。它们可能分散在多个目录中。所以编辑项目设置:右键单击解决方案资源管理器中的项目名称,选择“属性”,然后深入到"配置属性“〉”C/C++“〉”常规“。属性表中的第一个字段显示“附加包含目录”。* 在执行其他操作之前 *,请单击“配置”下拉菜单并选择“所有配置”。如果同时具有32位和64位版本,点击平台下拉菜单并选择所有平台。现在转到“附加包含目录”并添加所有源目录的所有路径,并指定相对于项目文件目录的路径。因此,对于SuperCalc示例,如下所示:

..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output

进行此更改后,类似于Source\Math\Matrix\matrix_multiply. cpp的文件可以包含一行

#include "input_configuration.hpp"

include输入目录中的一个文件,它将完全正常工作。

(If并不是所有的事情都是可行的通常的方法是返回到项目属性,并在附加包含目录前面摆弄..\序列的数量。* 记住 * 每次您要进行更改时,必须再次选择所有配置-否则您的更改将只应用于当前配置(调试或发布)。该设置是 * 非粘性的 *。)

tyg4sfes

tyg4sfes2#

实际上可以通过Visual Studio查看(和操作)物理文件结构,如this SO post中所述:
头文件/源文件不是Visual Studio强加的要求。这只是默认布局,它是虚拟的,而不是物理的。如果您在解决方案资源管理器中单击“显示所有文件”,它将显示硬盘上的文件夹树-您可以根据需要进行操作。

bz4sfanl

bz4sfanl3#

我迟到了,但是我不建议接受这个答案。主要原因是代码可移植性。相反,我建议:
1.在visual studio外部创建文件夹和子文件夹的布局(与接受的答案相同,但下面的要点不同)。在每个子文件夹内部创建一个includesrc文件夹
1.然后在配置属性〉C/C ++〉常规〉"附加包含目录"(对于所有配置和所有平台)中添加一个单个文件夹,它是所有子文件夹的基础。
1.在这些子文件夹中添加src文件和includes文件。
1.最后,使用relatives路径将每个头文件包含到此基本文件夹。
需要说明的是:如果项目的布局如下所示:

MyProjet
   Math
     include
       random.h
       functions.h
     src
       random.cpp
       functions.cpp
   Probability
      include
        normal.h
      src
        normal.cpp

functions.cpp中应该有以下include语句:

#include"Math/include/functions.h"

如果您还需要使用functions.cpp中的normal代码,则functions.cpp的顶部应如下所示:

#include"Math/include/functions.h"
#include"Probability/include/normal.h"

这样,您就可以在另一个项目(B)中轻松地重用Math子文件夹:只需将MyProject基本文件夹添加到项目B的"Additional Include Directories"中即可。
关键点是在"附加包含目录"属性中只包含一个基本文件夹。
ps:VS 2015的智能感知功能对编写#include...帮助很大

j5fpnvbx

j5fpnvbx4#

使用构建系统(如CMakePremake)可以帮助组织文件,而且它还有一个额外的好处,即帮助您将代码移植到其他平台。Here是关于这个主题的一个很好的演示。
由于这可能对某些人有帮助,我还应该补充一点,即将源文件与项目文件分开(*.vcxproj)使得创建新文件变得更加困难,因为Visual Studio默认情况下希望在项目所在的文件夹中创建新文件。到目前为止,我发现的解决此问题的方法是使用Visual Assists扩展,因为它允许添加相对于目录或当前打开的文件的新文件。请参阅this帖子以获得进一步的解释。

bd1hkmkf

bd1hkmkf5#

如果确实要在源代码以外的位置创建解决方案和项目,可以更改工作目录:
第一个月

相关问题