문제

나는 CMAKE에서 CTEST를 시도하고 있습니다. make test 표적. 문제는 Cmake가 프로젝트의 일부이기 때문에 내가 실행하려는 테스트가 구축되어야한다는 것을 "이해하지 못한다"는 것입니다.

그래서 저는이 종속성을 명시 적으로 지정할 수있는 방법을 찾고 있습니다.

도움이 되었습니까?

해결책

그것은이다 아마도cmake의 버그 (이전에 추적되었습니다 여기) 이것은 상자에서 작동하지 않습니다. 해결 방법은 다음을 수행하는 것입니다.

add_test(TestName ExeName)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
                  DEPENDS ExeName)

그런 다음 실행할 수 있습니다 make check 그리고 테스트를 컴파일하고 실행합니다. 여러 테스트가 있으면 사용해야합니다. DEPENDS exe1 exe2 exe3 ... 위 줄에서.

다른 팁

실제로 사용 방법이 있습니다 make test. 테스트 실행 파일의 빌드를 테스트 중 하나로 정의한 다음 테스트 간의 종속성을 추가해야합니다. 그건:

ADD_TEST(ctest_build_test_code
         "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target test_code)
ADD_TEST(ctest_run_test_code test_code)
SET_TESTS_PROPERTIES(ctest_run_test_code
                     PROPERTIES DEPENDS ctest_build_test_code)

나는 Richq의 대답의 변형을 사용합니다. 최상위로 CMakeLists.txt, 나는 사용자 정의 대상을 추가하고 build_and_test, 모든 테스트를 구축하고 실행하기 위해 :

find_package(GTest)
if (GTEST_FOUND)
    enable_testing()
    add_custom_target(build_and_test ${CMAKE_CTEST_COMMAND} -V)
    add_subdirectory(test)
endif()

다양한 하위 프로젝트에서 CMakeLists.txt 아래에 파일 test/, 나는 각 테스트 실행 파일을 의존성으로 추가합니다. build_and_test:

include_directories(${CMAKE_SOURCE_DIR}/src/proj1)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(proj1_test proj1_test.cpp)
target_link_libraries(proj1_test ${GTEST_BOTH_LIBRARIES} pthread)
add_test(proj1_test proj1_test)
add_dependencies(build_and_test proj1_test)

이 접근법을 사용하면 그냥 필요합니다 make build_and_test 대신에 make test (또는 make all test), 그리고 그것은 시험 코드 (및 그 종속성) 만 구축하는 이점이 있습니다. 대상 이름을 사용할 수없는 것은 부끄러운 일입니다. test. 제 경우에는 트리 외부 디버그 및 릴리스 (및 크로스 컴파일 된) 빌드를 호출하는 최상위 스크립트가 있기 때문에 나쁘지 않습니다. cmake 그리고 make, 그리고 그것은 번역됩니다 test ~ 안으로 build_and_test.

분명히, Gtest는 필요하지 않습니다. Google 테스트를 사용/유사하게 사용하고 Cmake/Ctest와 함께 사용하는 완전한 예를 공유하고 싶었습니다. IMHO,이 접근법은 또한 내가 사용할 수있는 이점이 있습니다. ctest -V, 테스트가 실행되는 동안 Google 테스트 출력을 보여줍니다.

1: Running main() from gtest_main.cc
1: [==========] Running 1 test from 1 test case.
1: [----------] Global test environment set-up.
1: [----------] 1 test from proj1
1: [ RUN      ] proj1.dummy
1: [       OK ] proj1.dummy (0 ms)
1: [----------] 1 test from proj1 (1 ms total)
1:
1: [----------] Global test environment tear-down
1: [==========] 1 test from 1 test case ran. (1 ms total)
1: [  PASSED  ] 1 test.
1/2 Test #1: proj1_test .......................   Passed    0.03 sec

당신이 에뮬레이션하려고한다면 make check,이 위키 항목을 찾을 수 있습니다.

http://www.cmake.org/wiki/cmakeemulatemakecheck

방금 성공을 거두는 일을 확인했습니다 (Cmake 2.8.10).

두통을 저장하십시오.

make all test

저를 위해 상자 밖으로 작동하며 테스트를 실행하기 전에 종속성을 구축합니다. 이것이 얼마나 단순한지를 감안할 때 거의 원주민을 만듭니다. make test 기능은 코드가 고장난 경우에도 마지막 컴파일 테스트를 실행할 수있는 옵션을 제공하기 때문에 편리합니다.

이것이 내가 망치고 사용하고있는 것입니다.

set(${PROJECT_NAME}_TESTS a b c)

enable_testing()
add_custom_target(all_tests)
foreach(test ${${PROJECT_NAME}_TESTS})
        add_executable(${test} EXCLUDE_FROM_ALL ${test}.cc)
        add_test(NAME ${test} COMMAND $<TARGET_FILE:${test}>)
        add_dependencies(all_tests ${test})
endforeach(test)

build_command(CTEST_CUSTOM_PRE_TEST TARGET all_tests)
string(CONFIGURE \"@CTEST_CUSTOM_PRE_TEST@\" CTEST_CUSTOM_PRE_TEST_QUOTED ESCAPE_QUOTES)
file(WRITE "${CMAKE_BINARY_DIR}/CTestCustom.cmake" "set(CTEST_CUSTOM_PRE_TEST ${CTEST_CUSTOM_PRE_TEST_QUOTED})" "\n")

ymmv

cmake> = 3.7을 사용하는 경우 권장되는 접근법은 사용하는 것입니다. 비품:

add_executable(test test.cpp)
add_test(test_build
  "${CMAKE_COMMAND}"
  --build "${CMAKE_BINARY_DIR}"
  --config $<CONFIG>
  --target test
)
add_test(test test)
set_tests_properties(test       PROPERTIES FIXTURES_REQUIRED test_fixture)
set_tests_properties(test_build PROPERTIES FIXTURES_SETUP    test_fixture)

위의 모든 답변은 완벽합니다. 그러나 실제로 CMake는 CTEST를 테스트 도구로 사용하므로 미션을 수행하는 표준 방법 (저는 생각합니다)은 다음과 같습니다.

enable_testing ()
add_test (TestName TestCommand)
add_test (TestName2 AnotherTestCommand)

그런 다음 실행하십시오 cmake 그리고 만들다 대상을 구축합니다. 그 후, 당신은 도망 갈 수 있습니다 테스트하십시오, 또는 그냥 실행하십시오

ctest

결과를 얻을 수 있습니다. 이것은 CMAKE 2.8에 따라 테스트됩니다.

세부 정보 확인 : http://cmake.org/wiki/cmake/testing_with_ctest#simple_testing

모든 대답은 좋지만 명령에 따라 시험을 실행하는 전통 위반을 의미합니다. make test. 나는이 트릭을했다 :

add_test(NAME <mytest>
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND sh -c "make <mytarget>; $<TARGET_FILE:<mytarget>>")

이는 테스트가 (선택적으로) (선택적으로) 및 실행 가능한 대상을 실행하는 것으로 구성되어 있음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top