我需要使用定義在頭文件中的#define宏以用於輸出文件的規範。Visual Studio 2010:使用define宏指定輸出可執行文件
要指定我需要的,有一個header.hpp文件,其中包含條目#define VERSION 12並且希望輸出myProgram_12.exe。有沒有辦法在Visual Studio 2010中完成該操作,而無需手動更改項目屬性。
我需要使用定義在頭文件中的#define宏以用於輸出文件的規範。Visual Studio 2010:使用define宏指定輸出可執行文件
要指定我需要的,有一個header.hpp文件,其中包含條目#define VERSION 12並且希望輸出myProgram_12.exe。有沒有辦法在Visual Studio 2010中完成該操作,而無需手動更改項目屬性。
如果關於版本號的權威信息來源是#define
,那麼恐怕沒有簡單的解決方案,但可以用醜陋的解決方法來完成。
您可以創建一個工具從頭文件中提取版本號,並將其寫入Visual Studio屬性表(.vsprops
)文件中,該文件將包含在項目中(在Property Manager
中)。該工具實際上可能是一個C++程序,它將頭部(或至少啓動這樣的程序來獲取該數字)#include
。
當然,該工具應該緩存該值,並且只在屬性表不同時才重新寫入,以便在將工具掛接到構建鏈時不會不斷重建。
+1沒有辦法在不手動解析文件的情況下將文件內容導入構建系統。因此事情變得醜陋。 – stijn
我可以建議你使用下面的代碼, 在您的.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
不要這樣做,反其道而行:在構建系統中設置一個屬性並在需要時使用該屬性。 – stijn