C++ Visual Studio 2010:使用定义宏指定输出可执行文件
我需要使用在头文件中定义的#define宏,用于输出文件的规范C++ Visual Studio 2010:使用定义宏指定输出可执行文件,c++,visual-studio-2010,build,compilation,C++,Visual Studio 2010,Build,Compilation,我需要使用在头文件中定义的#define宏,用于输出文件的规范 要指定我需要的内容,a需要一个header.hpp文件,该文件的条目为#define VERSION 12,并需要输出myProgram_12.exe。在Visual Studio 2010中,有没有一种方法可以在不手动更改项目属性的情况下实现这一点。如果版本号的权威信息源是#define,那么恐怕没有简单的解决方案,但可以通过丑陋的变通方法来实现 您可以创建一个工具,从标题中提取版本号,并将其写入Visual Studio属性页(
要指定我需要的内容,a需要一个header.hpp文件,该文件的条目为#define VERSION 12,并需要输出myProgram_12.exe。在Visual Studio 2010中,有没有一种方法可以在不手动更改项目属性的情况下实现这一点。如果版本号的权威信息源是
#define
,那么恐怕没有简单的解决方案,但可以通过丑陋的变通方法来实现
您可以创建一个工具,从标题中提取版本号,并将其写入Visual Studio属性页(.vsprops
)文件,该文件将包含在项目中(在属性管理器中)。该工具实际上可以是C++程序,它可以包含< <代码>标题(或至少启动这样一个程序来获得代码)。
当然,该工具可能应该缓存该值,并且只在属性表不同时重新写入属性表,这样,当您将该工具挂接到构建链时,您就不会得到不断的重建。我可以建议您使用以下代码,
在您的.h文件中
#define VERSION2
在.cpp文件中
' add reference to Microsoft.VisualStudio.VCProjectEngine
Imports EnvDTE
Imports Microsoft.VisualStudio.VCProjectEngine
Public Module Module1
Sub Test()
Dim prj As VCProject
Dim cfgs, tools As IVCCollection
Dim cfg As VCConfiguration
Dim tool As VCLinkerTool
prj = DTE.Solution.Projects.Item(1).Object
cfgs = prj.Configurations
cfg = cfgs.Item(1)
tool = cfg.Tools("VCLinkerTool")
#ifdef VERSION2
tool.OutputFile = "$(ProjectName).exe"
#ifdef VERSION3
tool.OutputFile = "$(ProjectName1).exe"
End Sub
End Module
它的VB代码,但您可以通过使用此链接轻松地将其转换为VC++代码不要这样做,换一种方式:在生成系统中设置属性,并在需要时使用该属性。+1如果不手动解析,无法将文件内容获取到生成系统中。于是事情变得丑陋起来。