2015-08-20 16 views
2

我有一個VS2008解決方案,其中有一個C++項目(爲了清楚起見,我們將其命名爲Project1)。該項目的目的是在同一解決方案中測試編譯另一個C++項目(Project2)時生成的可執行文件。被測試的可執行文件(Project2.exe)與我們的Project1(Project1.exe)生成的可執行文件構建在同一文件夾中。這裏是什麼樣子的build文件夾:是否有可以在Visual Studio中的C++項目中使用的宏來識別當前的SOLUTION配置?

Build_path /調試

  • Project1_Debug.exe
  • Project2_Debug.exe

Build_path /釋放

  • PROJECT1.EXE
  • Project2.exe

項目PROJECT1在配置管理器設置爲始終建立在調試(即使解決方案建立在發行),因爲有一個在PROJECT1使用時,我們編譯的第三方工具的一個問題在發佈。因此任何能識別Project1配置的預處理器定義都將被設置爲調試。瞭解這一點以及當解決方案配置設置爲在版本中構建時Project2構建版本的事實,當在版本中構建解決方案時,project1如何定位project2,因爲它始終在位於的同一文件夾中搜索?

約束(S):

  • 我不能改變build文件夾結構
  • 如前所述,使用PROJECT1的預處理器定義了宏如$(Configuration)不會幫助這裏,因爲$(Configuration)將被綁定到Project1的配置和將始終設置爲調試

我使用GetModuleFileName來從該位置PROJECT1的可執行文件,(它總是在debug文件夾),我發現的唯一的解決辦法是搜索宏表示當前的解決方案配置,這將幫助我通過在我的路徑中添加../Release並在Project2實際位於調試文件夾中時保留在調試文件夾中(當解決方案構建在調試中時),在發佈版中構建我的解決方案時(但Project1仍在調試中),請在發佈文件夾中獲取Project2.exe。在我的路徑中加入../Debug

有點僞代碼是這樣的:

If SOLUTION_CONFIGURATION == DEBUG // Project 1 and Project2 is in debug folder 
    add ../Debug in my research path to locate Project2_Debug.exe from Project1_Debug.exe's location 
Else if SOLUTION_CONFIGURATION == RELEASE // Project1 is in debug and Project2 is in release folder 
    add ../Release in my research path to locate Project2.exe from Project1_Debug.exe's location 
End if 
+0

可你只需要使用'GetModuleFileName()'來找出你的可執行文件的位置,並相應地調整路徑?或者,您可以使用Project Properties對話框中的C/C++ - > Preprocessor - > Preprocessor Definitions字段來定義自己的預處理器宏,該宏使用VC++編譯宏之一(即'$(Configuration)'給你「調試」或「發佈」) –

+0

@JonathanPotter感謝您的快速響應。我會在這個問題上添加一些細節來回答你的提議。但是,事實是,我確切地想要做你告訴我的,並且從'GetModuleFileName'進行調整,我已經使用它來獲取可執行路徑,但是如果沒有解決方案配置宏**,就不能這樣做,因爲我將被迫在路徑前面硬編碼'../ Release'或者'../ Debug',並且會有一個我無法測試的配置。 – lordjohncena

+0

那麼,我有一段時間沒有搜索「視覺工作室預定義的宏」。有一個可用的列表。也許一個符合你的需求。這裏是[宏列表](https://msdn.microsoft.com/en-us/library/b0084kay.aspx)。 –

回答

1

沒有standardard宏代表的配置和版本信息。

但是,MS維護Visual Studio的predefined macros的列表。

一些可能與其他編譯器一起提供。

P.S.我通過使用關鍵詞「Visual Studio預定義的宏」搜索互聯網來找到該網站。

+0

確實。 ISO C++ Standardard沒有詳細說明。 –

+0

謝謝托馬斯的迴應!我很愚蠢。我意識到MSDN上預定義的宏的存在,但在匆忙中,我沒有意識到答案在我面前是正確的,只是沒有想到要看它。對於我臨時的問題,我將有一個臨時解決方案,它將涉及到更改發佈中的項目屬性以在調試中進行編譯並將二進制文件放入發佈文件夾中。我喜歡這樣,有史以來第一個問題,20分鐘後我有我的答案。 – lordjohncena

相關問題