您对Visual Studio如何使用C ++文件感到有些困惑,但这没关系,因为文档很糟糕。首先,第一件事:与C#或Java不同,项目中文件的排列与磁盘上文件的排列无关。文件和文件夹实际上不在项目中。该项目仅列出磁盘上必须已经存在的文件和文件夹的名称和路径。
通常,您创建文件夹的布局,并在这些文件夹中包含源文件。您可以在Visual Studio之外执行此操作。您还将创建一个项目文件。当您向项目“添加文件”时,您要做的就是告诉项目在磁盘上找到文件的位置。
让我们来看一个具体的例子,我将向您展示如何组织它。假设您正在制作一个名为SuperCalc的图形计算器程序。您将拥有一个Source文件夹,然后在Source内创建文件夹以容纳不同的文件。假设您创建的文件夹是:
SuperCalc\Source\Input
SuperCalc\Source\Math
SuperCalc\Source\Math\Matrix
SuperCalc\Source\Output
你有3个子目录Source
:Input
,Output
,和Math
。该Math
子目录有一个名为的子目录Matrix
。输入,数学,矩阵和输出中将包含.cpp文件。您将使用Windows资源管理器或命令提示符创建这些目录(文件夹)。
现在,您还需要创建一个解决方案文件(SuperCalc.sln
)和一个项目文件(SuperCalc.vcxproj
&SuperCalc.vcxproj.filters
)。在Visual Studio中执行此操作。通常,项目文件位于解决方案目录的子文件夹中。这将由Visual Studio自动为您完成。选择解决方案文件的位置-它应该与源代码在同一目录结构(文件夹树)中的某个位置。我建议将其放在Source目录的旁边,在:
进入VS并选择File > New > Project > Visual Studio Solutions > Blank Solution File
。给解决方案命名(可能是“ SuperCalc”)和位置(我们刚刚在SuperCalc\Build
目录中选择的位置)。它将为您创建解决方案文件。
现在,在解决方案资源管理器中右键单击解决方案(“解决方案SuperCalc,0个项目”),然后选择Add > New Project
。选择一个名称-这将是您的程序可执行文件的名称,例如“ SuperCalc”!选择Win32或Win32控制台应用程序(这是一个DOS控制台程序)或Win32 Project(这是一个普通的Windows GUI程序)。通常,然后我单击“应用程序设置”进行一些重要更改:一方面,我选择“空项目”,因为除非我告知,否则我不希望Visual Studio为我创建文件和代码。当所有设置完成后,我单击“完成”。
现在,您有了由Visual Studio创建的解决方案文件和项目。您还可以在Visual Studio外部创建您的源代码,或至少要在其中创建源代码的目录结构(文件夹树)。现在是将这两件事联系在一起的时候了。
如果需要,可以将所有源文件列出到项目的“源文件”过滤器中。即使它们来自不同的目录(Input,Matrix等),磁盘上文件的位置与其在项目中的外观之间也不存在必需的关系。但是,如果您有很多文件,则创建“子过滤器”,在“源文件”过滤器内过滤并为它们指定“源”子文件夹的名称会更容易。这样,您就可以在项目文件中复制磁盘目录的结构。
右键单击“ SuperCalc”项目的“源文件”过滤器,然后选择“添加”>“添加新过滤器”。为其命名Input
(SuperCalc \ Source目录的第一个)。还要创建过滤器Math
和Output
。右键单击Math
过滤器,然后选择“添加”>“添加新过滤器”,以创建一个名为Matrix
(在Math的内部)的子过滤器。现在您有了以下过滤器:
超级计算器
源文件
输入值
数学
矩阵
输出量
与您先前创建的目录(文件夹)平行。 这纯粹是对人类的方便安排。Visual Studio不了解有关它的任何特殊信息。如果仅告诉VS“添加文件”,则不会将文件放入正确的过滤器中。您必须告诉它放在哪里。
要添加或创建您的.cpp文件,请选择与.cpp文件所在目录相对应的过滤器名称。因此,要添加或创建文件 SuperCalc\Source\Math\Matrix\matrix_multiply.cpp
,请Matrix
在解决方案资源管理器中右键单击过滤器,然后选择“添加”>“添加新文件”或“添加现有文件”。(“添加现有文件”适用于已经编写了matrix_multiply.cpp并且只想告诉项目在哪里的情况。)使用对话框导航至Source\Math\Matrix
目录。对整个程序中的所有源文件重复此过程。
您还存在一个问题:“是否可以使用$(CURDIR)来包含源文件文件夹而不需要绝对路径?” 真幸运:Visual Studio项目不使用绝对路径!他们使用相对路径。项目文件存储从包含.vcxproj文件的目录到包含源文件的目录所需的相对路径。所以,如果你创建SuperCalc.sln
并SuperCalc.vcxproj
在那里我建议(该SuperCalc\Build
目录),并且您在源子目录中添加.cpp文件,您可以使用记事本去看看的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 \ Math \ Matrix \ matrix_multiply.cpp之类的文件可以包含一行
#include "input_configuration.hpp"
从输入目录中#include一个文件,它将全部正常工作。
(如果并非所有方法都可行,通常的方法是返回“项目属性”,并..\
在“其他包含目录”前面摆弄序列数。 请记住,每次进行更改时,都必须选择“所有配置”再次-否则您的更改将仅适用于当前配置(调试或发行版)。该设置不固定。)