我有一個程序讀取文件格式(對於好奇的ISO 10303-11)的描述並從中生成C++。生成的代碼被編譯到一個庫中,並且該庫與各種可執行文件鏈接以讀取/寫入該文件格式。cmake/ctest:是否可以使用創建構建目標作爲測試?
我有CMake設置爲構建生成器程序並生成庫文件的配置時指定的任何文件格式。
現在,我想添加測試。這些測試與構建過程中已經完成的步驟相同 - 必須在CTest腳本中重做這些步驟,還是有辦法告訴ctest構建目標並捕獲任何錯誤消息?
我有一個程序讀取文件格式(對於好奇的ISO 10303-11)的描述並從中生成C++。生成的代碼被編譯到一個庫中,並且該庫與各種可執行文件鏈接以讀取/寫入該文件格式。cmake/ctest:是否可以使用創建構建目標作爲測試?
我有CMake設置爲構建生成器程序並生成庫文件的配置時指定的任何文件格式。
現在,我想添加測試。這些測試與構建過程中已經完成的步驟相同 - 必須在CTest腳本中重做這些步驟,還是有辦法告訴ctest構建目標並捕獲任何錯誤消息?
如果您使用的是最新版本的ctest(最新正式版本是2.8.6),那麼您可以使用add_test的NAME/COMMAND簽名與cmake --build命令行選項一起構建構建樹中的特定目標。
例如,下面應該工作,假設一個名爲「TGT1」的自定義目標(或庫或可執行目標):
add_test(NAME test.build.tgt1
WORKING_DIRECTORY ${CMAKE_BINARY_DIRECTORY}
COMMAND ${CMAKE_COMMAND} --build . --target tgt1 --config $<CONFIGURATION>
)
這無處不在跨平臺工作具有相同的語法。它甚至適用於多配置生成器,如Visual Studio和Xcode。
您是否試過在您的CMakeLists.txt
文件中說enable_testing()
,然後調用add_test()
作爲測試目標?如果您遵循CMake文檔,我認爲您可以在一個整合構建腳本中執行所有操作。
是的,我已經使用了這兩個。我的問題是弄清楚如何讓ctest進行部分構建,然後運行測試。 – Mark
謝謝你,這使得跨平臺支持比我想要的更容易。例如,我將它與set_target_properties和set_test_properties一起使用:'set_target_properties($ {target} PROPERTIES EXCLUDE_FROM_ALL ON)'和'set_tests_properties(build _ $ {PROJECT_NAME} PROPERTIES DEPENDS generate _ _ {SCHEMA_SHORT_NAME} LABELS schema_build)'。我創建了一個[github gist](https://gist.github.com/1304839),其中包含需要執行此操作的其他人的工作代碼。 – Mark