VS创建工程后,根据配置选择,会自动生成对应的Debug或Release输出目录。
举个例子,我在“F:\Test\VS2010Test\UITest\”下创建一个“UITest”的工程
在VS中可以看到默认配置的属性(右击解决方案中的工程名,选择“属性”,打开“属性页”)如下:
从上面两图中可以看到创建工程时已经做好了默认的配置,并且编译后按照默认配置,生成的应用程序会在解决方案的同目录(即.sln文件)下,根据编译配置有个对应的“Debug”或者“Release”文件夹,生成的应用程序就在里边,如下:
同时,我们直接F5调试,也实际执行的就是上面这个目录中生成的应用程序,不会因为默认设置的目录产生任何目录相关的问题。以上,都是默认配置下产生的结果。
但在VS实际项目开发中,通常不是简单将生成目录放置在默认配置目录下,而是根据整个解决方案需要,比如一个主程序解决方案,也需要10个依赖的DLL工程配合,这时候不可能主程序和10个DLL,各自工程都默认各自的生成路径,这样很不利于联合开发调试,一般是单独做出一个子目录,用户存放生成的文件或结果。
比如根据上面的例子,在UITest目录下创建一个Bin文件夹,文件夹中包括编译平台是Win32还是行4,在“win32”或“x64”文件夹下都有各自生成的Debug或Release的文件,统一放在这里,以后UITest相关的其他工程输出也统一放在这里,那么这是就需要修改UITest工程的输出配置,如下:
只需要在“属性页”的“链接器”中的“常规”中“输出文件”设置如图中路径(里边的配置宏后面详细说明),就可以将工程的生成的应用程序输出目录改在“F:\Test\VS2010Test\UITest\Bin\Win32\Debug”生成,如图:
这时,当执行调试时,发现编译器提示找不到程序指定的路径了
这是因为修改了生成的路径,但调试的路径却没有修改,导致编译器找不到程序而没法执行,这就要修改调试路径
将“属性页”中的“调试”里的“命令”栏,改成跟前文中“链接器”中的“常规”中“输出文件”设置的路径一样,这样调试和生成的文件就指向同一处了,调试就不存在问题了。另外注意:必须要设置调试中的“工作目录”为“
(
P
r
o
j
e
c
t
D
i
r
)
”或者设置为“
(ProjectDir)”或者设置为“
(ProjectDir)”或者设置为“(OutDir)”
对于配置中的那些宏,常见的如下:
$(ConfigurationName) ,配置名字,通常是Debug或者Release
$(IntDir),编译器使用的中间目录,产出obj文件
$(ProjectDir) ,项目目录
$(ProjectName),当前工程名称,如示例中的project1,project2
$(TargetDir),目标输出文件所在的目录
$(TargetExt) ,目标输出的扩展名
$(TargetFileName),目标输出文件名,包括扩展名
$(TargetName),目标输出名,不包括扩展名
$(TargetPath),目标输出文件的全路径名
$(OutDir)就是我们之前在常规里设置的输出文件的目录
$(SolutionDir):解决方案目录,即.sln所在路径
$(Platform):解决方案平台名称,如x86、x64
$(Configuration):当前的编译配置名称,如Release、Debug