Skip to main content
 首页 » 编程设计

visual-studio之VC2010 C++之组织源文件

2024年02月27日21emanlee

我有一些关于如何在 VC 2010 C++ 项目中组织源文件的问题。包含的默认过滤器最终是不够的,我将有很多 .cpp 和 .hpp 文件,所以它不会很困惑。我想在项目的根目录下创建一个名为“source”的文件夹,然后在“source”中为我想要使用的各种源文件类别创建文件夹。当我右键单击解决方案时,我只能选择添加过滤器,而不是文件夹。我可以在 Windows 资源管理器中手动创建文件夹,然后包含它们,但是我失去了添加过滤器的能力。有没有办法添加新文件夹(不使用 Windows 资源管理器)并仍然使用过滤器?

另外,是否有类似于 $(CURDIR) 的东西,我可以用它来包含源文件夹而无需绝对路径?

在此先感谢您的帮助

请您参考如下方法:

您对 Visual Studio 如何处理 C++ 文件有些困惑,但没关系,因为文档很糟糕。第一件事:与 C# 或 Java 不同,项目中文件的排列与磁盘上文件的排列无关。文件和文件夹实际上并不“在”项目中;该项目仅列出文件和文件夹的名称和路径,这些文件和文件夹必须已存在于您的磁盘上。

通常,您创建文件夹的布局,这些文件夹中包含源文件。您可以在 Visual Studio 之外执行此操作。您还创建了一个项目文件。当您向项目“添加文件”时,您所做的就是告诉项目在磁盘上的何处找到该文件。

让我们用一个具体的例子来工作,我会告诉你我将如何组织它。假设您正在制作一个名为 的图形计算器程序。 super 计算器 .您将有一个 Source 文件夹,然后在 Source 内创建文件夹以保存不同的文件。假设您创建的文件夹是:

  • SuperCalc\Source\Input
  • SuperCalc\Source\Math
  • SuperCalc\Source\Math\Matrix
  • SuperCalc\Source\Output

  • 您有 Source 的 3 个子目录: Input , Output , 和 Math . Math子目录有一个名为 Matrix 的子目录.您将在输入、数学、矩阵和输出中拥有 .cpp 文件。您将使用 Windows 资源管理器或命令提示符创建这些目录(文件夹)。

    现在您还需要创建一个解决方案文件 ( SuperCalc.sln ) 和一个项目文件 ( SuperCalc.vcxproj & SuperCalc.vcxproj.filters )。在 Visual Studio 中执行此操作。通常项目文件位于解决方案目录的子文件夹中;这将由 Visual Studio 自动为您完成。选择一个位置
    解决方案文件——它应该在与源代码相同的目录结构(文件夹树)中的某个位置。我建议把它放在源目录旁边,在:
  • SuperCalc\Build

  • 进入VS并选择 File > New > Project > Visual Studio Solutions > Blank Solution File .为解决方案命名(可能是“SuperCalc”)和位置(我们刚刚在 SuperCalc\Build 目录中选择的位置)。它将为您创建解决方案文件。

    现在右键单击解决方案资源管理器中的解决方案(“Solution SuperCalc, 0 projects”),然后选择 Add > New Project .选择一个名称——这将是您的程序可执行文件的名称,例如“SuperCalc”!选择 Win32 , 要么 Win32 控制台应用程序 (这是一个 DOS 控制台程序)或 Win32 项目 (这是一个普通的 Windows GUI 程序)。通常我然后单击应用程序设置进行一些重要更改:一方面,我选择空项目,因为我不希望 Visual Studio 为我创建文件和代码,除非我告诉它。当一切按照我想要的方式进行设置后,我单击“完成”。

    现在你已经有了由 Visual Studio 创建的解决方案文件和项目。您还拥有在 Visual Studio 之外创建的源代码,或者至少是源代码所在的目录结构(文件夹树)。是时候把这两件事联系在一起了。

    如果需要,您可以将所有源文件列出到项目的源文件过滤器中。即使它们来自不同的目录(Input、Matrix 等),磁盘上文件的位置与其在项目中的外观之间没有必要的关系。但是如果你有很多文件,如果你创建“子过滤器”,在源文件过滤器中的过滤器,并给它们源的子文件夹的名称,会更容易。这样,您就可以在项目文件中复制磁盘目录的结构。

    右键单击“SuperCalc”项目的源文件过滤器,然后选择添加 > 添加新过滤器。给它起个名字 Input (第一个 SuperCalc\Source 目录)。同时创建过滤器 MathOutput .右键单击 Math filter 并选择 Add > Add New Filter,创建一个名为 Matrix 的子过滤器(在数学里面)。现在你有这些过滤器:
       SuperCalc 
          Source Files 
             Input 
             Math 
                Matrix 
             Output 
    

    which parallels the directories (folders) you created earlier. This is purely a convenient arrangement for humans. Visual Studio doesn't understand anything special about it. If you just tell VS to "add a file" it won't put the file in the correct filter. You'll have to tell it where to put it.

    To add or create your .cpp files, select the filter name corresponding to the directory where the .cpp file is. So, to add or create a file SuperCalc\Source\Math\Matrix\matrix_multiply.cpp, right-click on the Matrix filter in Solution Explorer, and pick Add > Add New File or Add Existing File. (Add Existing File is for when you have already written matrix_multiply.cpp and you just want to tell the project where it is.) Use the dialog box to navigate to the Source\Math\Matrix directory. Repeat this process for all the source files in your whole program.

    You also had the question "is there something similar to $(CURDIR) that I could use to include the source file folder without needing an absolute path?" You are in luck: Visual Studio projects don't use absolute paths! They use relative paths. The project file stores the relative path required to get from the directory containing the .vcxproj file to the directory containing the source file. So if you created SuperCalc.sln and SuperCalc.vcxproj where I suggested (the SuperCalc\Build directory), and you add your .cpp files in the source subdirectories, you can go look inside the SuperCalc.vcxproj file using Notepad, and you'll see lines like:

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

    Since there are no absolute paths, you could take the entire SuperCalc directory tree and move it somewhere else, and it would all still work. No need for environment variable hacks like $(CURDIR).

    One final thing to know: since you are putting your source files in multiple directories, you might have problems with #includeing headers, the .h or .hpp files. You must tell the compiler the directories where your header files are located. They will probably be scattered among multiple directories. So edit the project settings: right-click on the project name in Solution Explorer, choose Properties, and drill down to Configuration Properties > C/C++ > General. The first field in the property sheet says "Additional Include Directories". Before you do anything else, click on the Configuration drop-down menu and choose All Configurations. If you have both a 32-bit and 64-bit build, click on the Platform drop-down menu and choose All Platforms. Now go to the "Additional Include Directories" and add all the paths to all the source directories, with the paths specified relative to the project file's directory. So for the SuperCalc example, it would look like:

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

    Once this change is made, a file like Source\Math\Matrix\matrix_multiply.cpp can have a line

    #include "input_configuration.hpp" 
    

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

    (如果它不能全部正常工作,通常的方法是返回到项目属性并摆弄附加包含目录前面的 ..\ 序列的数量。请记住,每次进行更改时都必须再次选择 所有配置 -- 否则您的更改将仅适用于当前配置(调试或发布)。该设置不具有粘性。)