我有一個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
可你只需要使用'GetModuleFileName()'來找出你的可執行文件的位置,並相應地調整路徑?或者,您可以使用Project Properties對話框中的C/C++ - > Preprocessor - > Preprocessor Definitions字段來定義自己的預處理器宏,該宏使用VC++編譯宏之一(即'$(Configuration)'給你「調試」或「發佈」) –
@JonathanPotter感謝您的快速響應。我會在這個問題上添加一些細節來回答你的提議。但是,事實是,我確切地想要做你告訴我的,並且從'GetModuleFileName'進行調整,我已經使用它來獲取可執行路徑,但是如果沒有解決方案配置宏**,就不能這樣做,因爲我將被迫在路徑前面硬編碼'../ Release'或者'../ Debug',並且會有一個我無法測試的配置。 – lordjohncena
那麼,我有一段時間沒有搜索「視覺工作室預定義的宏」。有一個可用的列表。也許一個符合你的需求。這裏是[宏列表](https://msdn.microsoft.com/en-us/library/b0084kay.aspx)。 –