Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio 2010:使用定义宏指定输出可执行文件_C++_Visual Studio 2010_Build_Compilation - Fatal编程技术网

C++ Visual Studio 2010:使用定义宏指定输出可执行文件

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属性页(

我需要使用在头文件中定义的#define宏,用于输出文件的规范


要指定我需要的内容,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如果不手动解析,无法将文件内容获取到生成系统中。于是事情变得丑陋起来。