1

以下にリンクされている CATCH 単体テスト スイートを使用しようとしています。 https://github.com/philsquared/Catch

しかし、私はそれを正しくすることができません。main.cpp と test.cpp は次のとおりです。

//main.cpp
#define CATCH_CONFIG_MAIN 
#include "catch.hpp"

//test.cpp
#include "catch.hpp"

TEST_CASE("TESTTest", "") {
    CHECK(1 != 2 );
}

この 2 つのファイルが同じフォルダーにある場合、目的の結果を得ることができました。ただし、 をtest.cppという名前のサブディレクトリに移動しましたtest。期待どおりに機能しなくなりましたが、リンク エラーが発生します。

私のcmake設定を以下に説明します。

project(catchTest)
cmake_minimum_required(VERSION 2.8)

file(GLOB_RECURSE INCS "./*.cpp")
add_executable(${PROJECT_NAME} main.cpp ${INCS})

include_directories(.)

file(GLOB_RECURSE INCS "./*.cpp")サブディレクトリにあるすべての cpp ソース ファイルを含めるために追加されました。のinclude_directories(.)定義を知らせるために含まれていましたcatch.hpp

私は何か間違ったことをしたと確信していますが、それを修正する方法がわかりません。この問題を解決するために私にアドバイスしてください。

Windows 上で実行され、mingw gcc-4.9.1 を使用してコンパイルされ、cmake ninja ジェネレーターによって生成されました。

編集: エラー メッセージの最初の数行を追加しました。

失敗しました: cmd.exe /c cd 。&& C:\MinGW\bin\g++.exe CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/test/testTest.cpp.obj -o catchTest. exe -Wl,--out-implib,libcatchTest.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 - loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd . CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): `Catch::getResultCapture()' の複数定義

CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): 最初にここで定義

4

3 に答える 3

3

正しい catch.hpp を含める必要があります。リポジトリには、同じ名前の 2 つの異なるインクルードがあります。1 つはインクルード内、もう 1 つは single_include と呼ばれます。single_include を使用していることを確認してください。

于 2014-08-19T08:42:19.813 に答える
3

CMakeLists.txt が間違っています。メインが 2 回含まれています。add_executable-statement を次のように変更すると、うまくいきます。

add_executable(${PROJECT_NAME} main.cpp test.cpp )

それが役立つことを願っています。

キム

于 2014-08-19T09:08:15.927 に答える