我有一個小而不平凡的項目,由於架構原因,它被構建爲三個獨立項目,它們是相互依賴的,所以除非我特別關注或者改進測試覆蓋率發現了一個漏洞,對我來說,從項目根源開始工作是有道理的。使用CTest運行嵌套測試
佈局是這樣的:
/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/
在結構中的一個字,libmyproject
是我的應用程序的真正的肉,它是建立這種方式,因爲一個CLI是出貨代碼給最終用戶一個可怕的方式作爲一個庫,它也用於C#和Objective-C應用程序。 (以及所有按預期工作)
libmyotherproject
是一些平臺特定的支持代碼,不直接連接到libmyproject
,它有幾個單元測試。
vlc-plugin
在這裏並不重要,除非表明並非所有/src/*/
都有單元測試。
我的工作流通常是在CLI應用上破解,直到有用的東西出現,然後將其重構到庫中,並確保它是可移植的。
當我在/src/*/build/
工作,通常運行cmake ../ && make && ctest --output-on-failure
,一切正常。
當我/build
我工作,並運行cmake
,各個組件構建正確(使用add_subdirectories()
)從CMake的,但CTest
不遞歸找到測試。
爲CTest
的文檔是你應該做的一點點無助:
USAGE
ctest [options]
DESCRIPTION
The "ctest" executable is the CMake test driver program. CMake-generated build trees created for
projects that use the ENABLE_TESTING and ADD_TEST commands have testing support. This program will
run the tests and report results.
我早就預料的,因爲ADD_TEST()
呼叫住在/src/libmyotherproject/tests/CMakeLists.txt
,他們將運行? (他們至少編譯當我運行cmake
從/build/
)
我希望我已經能夠提供足夠的信息,謝謝。
你在最外面的CMakeLists.txt中有'enable_testing()'調用嗎? – sakra 2012-01-03 18:45:39
'enable_testing()'位於'/ src/libmyproject/CMakeLists.txt'中,另外還有一個add_subdirectory('tests')',它正確地(在'/ src/libmyproject/build'中)編譯,用'ctest')運行測試。將'enable_testing()'添加到頂部'CMakeLists.txt'不會改變任何內容。 '/ src/libmyproject/tests /'中的'CMakeLists.txt'包含'add_test()'調用本身。 – 2012-01-03 22:32:11
也許你在所有的add_subdirectory()調用之後調用了enable_testing()?它應該在add_subdirectory調用之前執行。儘管如此,在我的回答中,首選「include(CTest)」,它會爲您調用enable_testing()。 – DLRdave 2012-11-08 15:13:42