2013-06-24 98 views
3

我需要使用定義在頭文件中的#define宏以用於輸出文件的規範。Visual Studio 2010:使用define宏指定輸出可執行文件

要指定我需要的,有一個header.hpp文件,其中包含條目#define VERSION 12並且希望輸出myProgram_12.exe。有沒有辦法在Visual Studio 2010中完成該操作,而無需手動更改項目屬性。

+3

不要這樣做,反其道而行:在構建系統中設置一個屬性並在需要時使用該屬性。 – stijn

回答

2

如果關於版本號的權威信息來源是#define,那麼恐怕沒有簡單的解決方案,但可以用醜陋的解決方法來完成。

您可以創建一個工具從頭文件中提取版本號,並將其寫入Visual Studio屬性表(.vsprops)文件中,該文件將包含在項目中(在Property Manager中)。該工具實際上可能是一個C++程序,它將頭部(或至少啓動這樣的程序來獲取該數字)#include

當然,該工具應該緩存該值,並且只在屬性表不同時才重新寫入,以便在將工具掛接到構建鏈時不會不斷重建。

+0

+1沒有辦法在不手動解析文件的情況下將文件內容導入構建系統。因此事情變得醜陋。 – stijn

1

我可以建議你使用下面的代碼, 在您的.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++代碼通過使用此鏈接How to: Compile Example Code for Project Model Extensibility

相關問題