你是一个有点困惑Studio如何目视着C++文件工作,但没关系,因为该文件是糟糕的。第一件事情:与C#或Java不同,项目中文件的排列与磁盘上文件的排列无关。文件和文件夹不是“在”项目中,真的;该项目只列出了文件和文件夹的名称和路径,这些文件和文件夹必须已经存在于您的磁盘上。
让我们用一个具体的例子来工作,我会告诉你如何组织它。假设您正在制作一个名为SuperCalc的图形计算器程序。您将拥有一个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
)。在Visual Studio中执行此操作。通常,项目文件位于解决方案目录的子文件夹中;这将由Visual Studio自动完成。为 解决方案文件选择一个位置 - 它应该位于与源代码相同的目录结构(文件夹树)中。我建议把它旁边的源目录中:
走进VS并挑选File > New > Project > Visual Studio Solutions > Blank Solution File
。给解决方案一个名称(也许是“SuperCalc”)和一个位置(我们刚才在SuperCalc\Build
目录中选择的位置)。它将为您创建解决方案文件。
现在右键单击Solution Explorer中的解决方案(“Solution SuperCalc,0个项目”),然后选取Add > New Project
。选择一个名称 - 这将是您的程序可执行文件的名称,如“SuperCalc”!选择Win32,或者Win32控制台应用程序(这是一个DOS控制台程序)或Win32项目(这是一个普通的Windows GUI程序)。通常我会点击应用程序设置进行一些重要的更改:首先,我选择Empty Project,因为我不想让Visual Studio为我创建文件和代码,除非我告诉它。当它按照我想要的方式设置时,我点击FINISH。
现在,您已经获得了由Visual Studio创建的解决方案文件和项目。您还拥有您的源代码,或者至少是您的源代码所在的目录结构(文件夹树),在Visual Studio之外创建。现在是把这两件事联系在一起的时候了。
如果需要,可以将所有源文件列入项目的源文件过滤器。即使它们来自不同的目录(输入,矩阵等),磁盘上文件的位置与它们在项目中的外观之间也没有必要的关系。但是,如果您有很多文件,那么创建“子过滤器”,在“源文件”过滤器内部进行过滤,并为它们提供源的子文件夹的名称会更容易。这样,您就可以在项目文件中复制磁盘目录的结构。
右键单击“SuperCalc”项目的源文件筛选器,然后选择添加>添加新筛选器。给它起一个名字Input
(SuperCalc \ Source目录中的第一个)。还要创建过滤器Math
和Output
。右键单击Math
过滤器并选择添加>添加新过滤器,以创建一个名为Matrix
(Math内部)的子过滤器。现在你有这些过滤器:
SuperCalc
Source Files
Input
Math
Matrix
Output
它平行的目录(文件夹)之前创建。 这纯粹是人类便利的安排。 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
目录),并且将源文件添加到源子目录中,则可以查看SuperCalc。使用vcxproj文件记事本,你会看到线,如:
<ClCompile Include="..\..\..\Source\Math\Matrix\matrix_multiply.cpp" />
由于没有绝对路径,你可以把整个SuperCalc目录树和别的地方移动它,它都会仍然可以工作。不需要像$(CURDIR)这样的环境变量。
要知道的最后一件事:因为您将源文件放在多个目录中,所以可能会遇到与.h或.hpp文件相关的#include
问题。您必须告诉编译器头文件所在的目录。它们可能分散在多个目录中。因此,编辑项目设置:右键单击解决方案资源管理器中的项目名称,选择属性,然后深入到配置属性> C/C++>常规。属性表中的第一个字段显示“其他包含目录”。 在你做任何事情之前,点击配置下拉菜单并选择所有配置。如果您同时拥有32位和64位版本,请点击平台下拉菜单并选择所有平台。现在转到“其他包含目录”并将所有路径添加到所有源目录中,并指定相对于项目文件目录的路径。所以对于SuperCalc例如,它看起来像:
..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output
一旦做出改变,就像来源\数学\矩阵\ matrix_multiply.cpp一个文件可以有一个 线
#include "input_configuration.hpp"
到#包括来自Input目录的一个文件,它将全部工作。
(如果不是所有刚工作时,通常的做法是重新回到项目属性和小提琴与..\
序列的数目在附加包含目录的前面。记住,每次你去作你必须选择改变所有配置再次 - 。否则你的改变将只适用于当前配置(调试或释放)该设置不粘腻)
此外,您还可以定义用户宏如。 $(源)通过属性表(.props)。我建议尽可能多地在属性表中设置项目设置,因为许多项目可能会共享设置。 – 2012-06-11 20:16:12
很好的答案。我创建了与我的目录结构相匹配的过滤器,但我遇到了一个经常性的头痛问题,您稍微触及了一下。 VS不知道我的过滤器是链接到目录。当我按顺序添加代码时,这会变得很痛苦:foo.h,foo.c,bar.h,bar.c.我必须记住不断更改目录到正确的位置。 VC++会记住你的最后一个目录,所以它总是落后一步。 我向MS发布了一个建议,允许将目录与过滤器相关联。是这里。如果这也让你感到厌倦,请提高这个建议。 http://tinyurl.com/bud4zsv – 2013-03-07 22:59:04
甜!在2015年的社区中,一个空的解决方案是在新的>项目...>其他项目类型> Visual Studio解决方案>空白解决方案 – 2015-07-28 16:16:34