2014-01-09 77 views
1

我最近開始學習cmake,遇到了一個小問題。我得到了我的可執行文件和單元測試,從生成的makefile進行編譯時沒有問題。如果我在構建目錄中運行./test,則在UnitTest ++中創建的測試運行並按預期完成,打印結果。有什麼辦法可以讓make test簡單地運行測試可執行文件,而不是在ctest框架中運行它,還是應該以不同的方式進行操作?從cmake調用Unittest ++創建的makefile

這裏是我的代碼的最小工作示例:

的src/main/main.c中是一個簡單的空主要功能

的src /測試/ testMain.cpp:

#include <UnitTest++/UnitTest++.h> 

TEST(FailSpect) 
{ 
    CHECK(false); 
} 

int main() 
{ 
    UnitTest::RunAllTests(); 
} 

的CMakeLists.txt:

cmake_minimum_required(VERSION 2.6) 
project(myProject) 

enable_testing() 

set(myProjectMain 
    src/main/main.c 
    ) 

set(myProjectSrc 
    ) 

set(myProjectTestSrc 
    src/test/testMain.cpp 
    ) 

add_executable(myExecutable ${myProjectMain} ${myProjectSrc}) 
add_executable(testSuite ${myProjectTestSrc} ${myProjectSrc}) 

target_link_libraries(testSuite UnitTest++) 

add_test(testExe testSuite) 

make test輸出:

Running tests... 
Start processing tests 
Test project /myProjectDir/build 
    1/ 1 Testing testExe      Passed 

100% tests passed, 0 tests failed out of 1 

./testSuite輸出:

/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 

回答

1

我已經整理出如何做到這一點。在的CMakeLists.txt文件的末尾

add_custom_target(test ./testExe 
    DEPENDS ./testExe) 

:首先刪除行:

enable_testing() 

add_test(testExe testSuite) 

和由線替換它們。現在make (all)構建測試和主程序。如果一切都已經建成,那麼make test只會檢查測試,建成並運行它們,產生:

[100%] Built target testExe 
/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 
[100%] Built target test 

如果測試過時(後make clean爲例),然後make test會產生:

[100%] Building CXX object CMakeFiles/testExe.dir/src/test/testMain.cpp.o 
Linking CXX executable testExe 
[100%] Built target testExe 
/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 
[100%] Built target test