2010-06-29 45 views
4

我有以下目錄結構。組織測試項目和主要可執行文件 - C&C++

root 
--src 
---tests 

src包含用於應用程序的源&頭文件(C文件)。當這個應用程序建立時,它會生成一個可執行文件tests目錄包含應用程序的單元測試用例(C++文件,使用UnitTest++作爲測試框架)。

在測試項目中,我可以包含src目錄下的頭文件,編譯通過。鏈接時出現問題。鏈接器將無法在源目錄中找到目標文件。

我該如何解決這個問題? C & C++項目中的一般做法是爲主應用程序提供一個可執行文件,另一個用於需要相同源文件的測試。

  • 應用程序類型:跨平臺。
  • 發展現狀ENV:Linux的
  • 構建工具:CMake的

任何幫助將是巨大的!

回答

5

我一直爲此做了三件事。我有一個構建靜態庫的構建,其中包含我的大部分代碼。然後,我會有一個測試項目與靜態庫和一個包含UI代碼的項目鏈接,這些代碼通常不會進行單元測試。

因爲兩個項目共享相同的編譯靜態庫,所以項目之間不需要重新編譯文件。

  • 注意:當我說上述「項目」時,我的意思是無論您的構建系統有什麼「項目」的範圍。對於將成爲proj文件的Visual Studio,對於CMake它應該是構建目標。
+0

這與我傾向於最終使用的方法完全相同。 – 2010-06-29 00:55:17

+0

我明白你的意思。從技術上講,創建鏈接到它的靜態庫和可執行文件並將目標文件直接鏈接到可執行文件有什麼不同? – 2010-06-29 00:55:21

+0

它應該沒有區別Appu。 – 2010-06-29 00:57:22

2

我認爲你需要在你的測試項目中編譯這些文件,或者在你可以包含的主項目中創建一個lib。

+0

是的。我正在考慮在測試項目中編譯它們。但是這會導致編譯兩次的文件。這對我來說並不好看。 – 2010-06-29 00:47:46

+0

將你想測試的核心代碼編譯爲一個庫,然後從你的測試項目和你的主調用代碼中調用它。 – 2010-06-29 00:54:04