質問

を使用してテストの一部を自動的に実行するために、CMake で CTest を試しています。 make test 目標。問題は、実行したいテストはプロジェクトの一部であるため、ビルドする必要があることを CMake が「理解」していないことです。

そこで、この依存関係を明示的に指定する方法を探しています。

他のヒント

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を呼び出すことによって構築し、それがtestbuild_and_testを変換します。

もちろん、GTESTのものは必要ありません。私はGoogleのテストのように/を使用することが起こると、CMakeの/ CTESTでそれを使用しての完全な例を共有したいと思いました。 IMHO、このアプローチは、私がテストを実行しながら、Googleのテスト出力を示しctest -Vを、使用することを可能にする利点があります:

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 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")

メーリングリスト

あなたはCMakeの> = 3.7を使用している場合は、その後、推奨されるアプローチは、<のhref = "https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/" のrelを使用することです= "nofollowをnoreferrer">器具はを

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