CMakeLists.txtにgoogletestsを追加する際に問題が発生しました。
問題は「Error:includeがロードファイルを見つけることができませんでした:GoogleTest」です。
次のコマンドを使用してGoogleテストをインストールしました。
私がここから取ったこれらのコマンド。私のCMakeLists.txtがあります:
cmake_minimum_required(VERSION 3.6.2)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_STANDARD 17)
project(compiler)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
find_package(FLEX REQUIRED)
FLEX_TARGET(lexer src/lexer.fl ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
find_package(GTest REQUIRED)
include(GoogleTest) <- There is a problem!
add_executable(run_tests src/tests/test.cpp src/main.h ${FLEX_lexer_OUTPUTS})
target_include_directories(run_tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(run_tests ${GTEST_LIBRARIES} stdc++fs)
#gtest_add_tests(TARGET run_tests)
add_executable(compiler src/main.h src/main.cpp src/common.h ${FLEX_lexer_OUTPUTS})
アドバイスをいただければ幸いです!
すでにlibgtestをインストールしている場合は、CMakeLists.txtに次を追加するだけです。
target_link_libraries($YOUR_TARGTET gtest)
だが!複雑すぎたと思います。
サードパーティのライブラリとして、googletestのソースコードをプロジェクトに直接含めることをお勧めします。私はここと後にこのようにここに行きます。
コード例に「apt-get」を使用しているので、DebianまたはDebianの子孫を使用していると思います。まあ、当然のことながら、実際にはどのOSを使用しているかは関係ありません。
googletestのソースコード(リンクについては前を確認)をプロジェクトに複製し、メインのCMakeLists.txtに以下を追加します。
add_subdirectory(googletest)
gtestが必要になるサブcmakeプロジェクトに以下を追加します。
include_directories(${PARENT_PATH_OF_GTEST}/googltest/googltest/include)
# ...
target_link_libraries($YOUR_TARGET gtest)
例えば
次の構造のプロジェクトがあるとします。
.
├── assets
│ └── ...
├── bin
│ ├── CMakeLists.txt
│ └── ...
├── CMakeLists.txt <== Your main CmakeLists.txt
├── src
│ ├── CMakeLists.txt
│ └── ...
├── tests <== Test cases
│ ├── CMakeLists.txt
│ └── ...
└── third_party
├── CMakeLists.txt
├── googletest <=== gtest
└── ...
メインのCMakeLists.txtには、次のものが含まれている必要があります。
add_subdirectory(tests)
add_subdirectory(third_party)
# ...
third_party CMakeLists.txtの場合:
add_subdirectory(googletest)
# ...
テストではCMakeLists.txt:
include_directories(${CMAKE_SOURCE_DIR}/third_party/googltest/googltest/include)
# ...
add_executable(my_test...)
target_link_libraries(my_test gtest)
# ...
より良い例
JetbrainsのCLionでのGtestのビデオ例を次に示します。CLionは実際にはCMakeをベースにしているため、GTestをCMakeに統合する方法も明確に示しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加