Tôi muốn thử nghiệm của mình được khởi chạy mỗi khi dự án của tôi được xây dựng thành công. Và nếu một số bài kiểm tra bị hỏng, tôi cũng muốn bản dựng của tôi bị hỏng. Theo mặc định, tôi cần chạy thử nghiệm theo cách thủ công bằng cách chạy lệnh ctest
. CTest thực sự có thể xây dựng dự án nhưng tôi sử dụng IDE để gọi make
để xây dựng các nguồn. Và make
không chạy thử nghiệm.Làm thế nào để chạy ctest sau khi xây dựng dự án của tôi với cmake
Tôi thêm lệnh này vào tệp gốc CMakeLists.txt nhưng nó không hoạt động.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake không trả lại bất kỳ lỗi nào và mọi thứ được xây dựng tốt nhưng lệnh tùy chỉnh của tôi không gọi. Làm thế nào tôi có thể chạy một cái gì đó sau mỗi lần xây dựng thành công trong CMake?
Cập nhật:
giải pháp cuối cùng của tôi là chức năng này:
macro(add_unit_test target target_test)
set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
add_test(target ${CMAKE_CURRENT_BINARY_DIR}/target_test)
endmacro(add_unit_test)
nó gọi add_test
và nhớ mục tiêu thử nghiệm trong một danh sách. Mỗi thử nghiệm trong một dự án được thêm vào bởi hàm này. Trong thư mục gốc CMakeLists.txt, tôi có mã này:
add_custom_target(all_tests ALL
DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
Nó tạo mục tiêu tùy chỉnh phụ thuộc vào tất cả các thử nghiệm đơn vị trong một dự án. Lệnh tùy chỉnh được chạy sau khi mục tiêu all_tests
được tạo.
Cảm ơn cho câu trả lời - trong macro của bạn, trong 'add_test', tôi nghĩ rằng bạn cần' $ {target_test} 'thay vì' target_test' – experquisite