1

我有一個用於生產代碼和測試代碼的靜態庫。我希望只有在構建測試.exe時才能夠注入測試數據。我想使用預處理器#defines而不是MSVS配置(例如,Debug vs. Release)來執行此操作,因爲我正在測試性能。調試版本會關閉優化,這在調試過程中很好,但當我想要測試性能時不是那麼好。Visual Studio 2010 - 試圖有條件地編譯基於目標.exe的靜態庫

舉個例子,假設我有MSVS中的Foo.lib,Production.exe和Test.exe項目。 Production.exe和Test.exe都鏈接Foo.lib。我希望Production.exe和Test.exe用它們各自的預處理器定義重建Foo.lib,所以Foo.lib中的代碼將根據它的目標可執行文件進行有條件編譯。

我願意接受其他解決方案,我希望我能清楚地說明我的問題。首先發布堆棧溢出。

回答

3

您需要設置多個解決方案配置來支持您所需的每種場景。首先,我們將一個新的測試配置添加到靜態庫,並創建一個伴隨測試解決方案配置:在Visual Studio

  • Solution Explorer中,右鍵單擊頂級解決方案節點上。
  • 點擊配置管理器...
  • 在項目列表中找到您的C/C++靜態庫項目。單擊該項目的配置單元格。它會變成一個下拉菜單。選擇新..從下拉菜單中選擇。
    • 輸入新項目配置的名稱。隨心所欲地稱呼它。在這些步驟中,我將其稱爲測試
    • 對於複製設置:字段,請選擇版本,因爲您希望啓用優化的測試配置。
    • 離開創建新的解決方案配置複選框被選中。
    • 點擊OK

現在你可以用你想要的#define語句修改您的靜態庫的新測試配置:

  • 找到你的C/C++項目解決方案資源管理器。上單擊鼠標右鍵,選擇屬性...
  • 選擇新測試從右上角的配置下拉配置。
  • 在左側窗格中,選擇配置屬性| C/C++ |預處理
  • 在右側,添加所需的#define到預處理定義的列表中

......現在,你要設置你的積聚,使你有建立一個測試構建配置.exe與靜態庫的測試配置,以及Release.exe與庫的版本配置。回到配置管理器(如我們做了前兩步以上):

  1. 設置你的構建配置Release.exe:

    • 在左上角的下拉選擇發佈活動解決方案配置
    • 爲了您Release.exe項目,選擇它的發佈配置和MA ke sure Build checked
    • 對於您的Test.exe項目,請確保Build未選中。
    • 對於靜態庫,選擇其發佈配置,並確保構建檢查
  2. 設置你的構建配置將Test.exe:

    • 在頂左下拉,選擇測試作爲有效的解決方案配置
    • 對於您的Release.exe項目,請確保Build未選中。
    • 爲了您將Test.exe項目,選擇它的發行配置(我認爲這就是你想要的),並確保構建檢查
    • 對於靜態庫,選擇其測試配置,使確保構建檢查

現在,當你改變你的解決方案,測試版本配置,我希望你有每個你想要的構建行爲。

+0

謝謝,安德魯。你的回答回答我的問題。我仍然會看看漢斯發佈的看似更好的解決方案。 – Bill 2011-03-17 18:35:27

3

這聽起來很錯誤,測試數據不屬於.lib。測試以另一種方式構建的代碼不是目標機器上使用的代碼,這不是真正的測試。 VS讓你擺脫麻煩,這是不可能的。你使用另一種配置來改變.lib的構建方式。

讓測試應用程序將測試數據提供給.lib。就像真正的應用程序在部署它之後提供真實數據一樣。

+0

感謝您的迴應。這個特殊的應用是使用麥克風作爲數據輸入。我會研究麥克風數據採集的問題。 – Bill 2011-03-17 18:29:46

+1

啊,當我讀到「靜態庫...用於測試代碼」時,我想「釋放靜態庫的構建,但在靜態庫源中啓用了斷言」。這種設置過去相對普遍。 Hans關於原始問題的反饋前提非常好。 – 2011-03-17 18:43:51