2014-03-06 74 views
2

我有一個qt項目設置作爲一個子項目與我的源代碼在src目錄和單元測試代碼設置在一個測試目錄。每個都有自己的項目文件。我希望能夠在其他計算機上編譯源代碼,但他們可能沒有安裝googletest庫。我已經看過qmake測試函數「require()」和「packagesExist()」,但是,它們看起來並不是用來處理外部庫的。qmake檢查庫

如果找不到測試庫,我該如何指示qmake跳過測試項目?

回答

1

如果庫存在那裏,那麼不檢查典型位置是不可能的。

不幸的是,googletest似乎並沒有發送package-config「.pc」文件,所以這就是爲什麼你不能使用qmake函數packagesExist()

所以,我會用一堆exist調用來解決這個問題,或者從qmake轉移到更好的東西,比如cmake

!exists("/foo/bar/baz.so"):!exists("/hello/world/baz.so"):...: message("Google test is not installed on your system") 
0

如果你想鏈接到沒有pkgconfig信息庫,你可以爲每個使用qtCompileTest()這些庫的QMAKE配置測試。我會告訴你如何使用qmake的這個特性。

qtCompileTest qmake配置測試將運行在qmake時間。如果測試編譯,config_將被添加到CONFIG變量,並且qmake將根據是否編譯測試打印Checking for <testname>... yesChecking for <testname>... no

在您的項目目錄中,創建一個名稱爲config_tests的目錄,然後爲您要測試的庫或功能創建一個目錄,一個開始的簡單qmake項目和main.cpp文件,最終如此:

myproject/ 
    myproject.pro 
    <source files, etc> 
    config_tests/ 
    googletest/ 
     googletest.pro 
     main.cpp 

充分利用googletest項目非常簡單,只需最低限度到可執行鏈接到googletest庫和測試包括必要的頭文件使用它。將這個項目直接加載到Qt Creator中,並測試它是否在你期望的場景下編譯,而不是在其他項目中編譯(例如測試你將要使用的包含和不包含googletest庫的各種平臺)

接下來,通過將以下內容添加到項目的頂部,在您的主項目中使用此qmake配置測試項目。 load(configure)以下爲qtCompileTest中的qmake支持負載 - 因爲它是不正常內置:

load(configure) 
qtCompileTest(googletest) 

在那裏你會被編譯需要googletest功能的地方,你可以在下面的qmake測試包起來:

CONFIG(config_googletest) { 
}