Ссылка с использованием GTest и CMakeC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ссылка с использованием GTest и CMake

Сообщение Anonymous »

Я пытаюсь добавить несколько тестов в свой проект с помощью CMAKE и столкнулся с проблемой.
Информация
Файл CMakeLists h3>

Код: Выделить всё

cmake_minimum_required(VERSION 3.25)
project(BetBot VERSION 2.1 DESCRIPTION "A simple discord bot to handle friendly bets.")

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

# Main Executable
add_executable(${PROJECT_NAME}
"src/main.cpp"
"src/AddBetCommand.cpp"
"src/AddBetCommand.h"
"src/AddMatchCommand.cpp"
"src/AddMatchCommand.h"
"src/AddResultCommand.cpp"
"src/AddResultCommand.h"
"src/Bet.h"
"src/BettorResults.cpp"
"src/BettorResults.h"
"src/CommandBase.h"
"src/ICommandReceiver.cpp"
"src/ICommandReceiver.h"
"src/BotData.cpp"
"src/BotData.h"
"src/Match.cpp"
"src/Match.h"
"src/MatchScore.cpp"
"src/MatchScore.h"
"src/ShowBettorsResultsCommand.cpp"
"src/ShowBettorsResultsCommand.h"
"src/ShowIncomingMatchesCommand.cpp"
"src/ShowIncomingMatchesCommand.h"
"src/JsonSerializer.cpp"
"src/JsonSerializer.h"
"src/SaveManager.cpp"
"src/SaveManager.h"
"src/BetBot.cpp"
"src/BetBot.h"
"src/DrawUtils.cpp"
"src/DrawUtils.h"
"src/ShowBetProposalCommand.cpp"
"src/ShowBetProposalCommand.h"
"src/ChooseMatchToBetOnCommand.cpp"
"src/ChooseMatchToBetOnCommand.h"
"src/ChooseMatchToSetResultCommand.cpp"
"src/ChooseMatchToSetResultCommand.h"
"src/ShowResultProposalCommand.cpp"
"src/ShowResultProposalCommand.h"
"src/FileWatcher.cpp"
"src/FileWatcher.h"
"src/LockableDataAccessors.h"
"src/BotConfigReader.cpp"
"src/BotConfigReader.h"
)

# Find our pre-installed DPP package (using FindDPP.cmake).
find_package(DPP REQUIRED)

# Link the pre-installed DPP package.
target_link_libraries(${PROJECT_NAME}
${DPP_LIBRARIES}
)

# Include the DPP directories.
target_include_directories(${PROJECT_NAME} PRIVATE
${DPP_INCLUDE_DIR}
)

set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 20
CXX_STANDARD_REQUIRED ON
)

# Google Test
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)

# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

# Test executable
enable_testing()

add_executable(Tests
"tests/MatchScore_Tests.cc"
)
target_link_libraries(Tests GTest::gtest_main)
target_compile_definitions(Tests PRIVATE TEST_ENABLED=1)

# Copy config.json at the right place
add_custom_command(
TARGET ${PROJECT_NAME}  POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/config.json
${CMAKE_CURRENT_BINARY_DIR}/config.json
)
MatchScore_Tests.cc

Код: Выделить всё

#include 

#include "../src/MatchScore.h"

TEST(MatchScoreTest, ComparePerfectTeamA)
{
MatchScore A{ 3,0 };
MatchScore B{ 3,0 };

EXPECT_EQ(A.Compare(B), MatchScore::EComparingResult::Perfect);
}
Он использует функцию сравнения, которая объявлена ​​в MatchScore.h и определена в MatchScore.cpp.
Проблема
Когда я пытался скомпилировать, у меня возникла эта ошибка ссылки:

ошибка LNK2019: неразрешенный внешний символ "public: enum MatchScore::EComparingResult __cdecl MatchScore ::Compare(struct MatchScore const &)const " (?Compare@MatchScore@@QEBA?AW4EComparingResult@1@AEBU1@@Z), указанный в функции "private: virtual void __cdecl MatchScoreTest_ComparePerfectTeamA_Test::TestBody(void)" (?TestBody@) MatchScoreTest_ComparePerfectTeamA_Test@@EEAAXXZ)

Из моего базового понимания CMake мне это кажется нормальным, поскольку я не добавлял файл MatchScore.cpp в исходный код исполняемого файла Tests. Но мне также кажется странным, что мне приходится снова добавлять все свои исходники в исполняемый файл Tests.
Поэтому у меня есть два вопроса:
  • Является ли подход с двумя исполняемыми файлами правильным?
  • Если да, нужно ли мне включать весь исходный файл в исполняемый файл Tests или есть лучший способ сделать это? это ?
Спасибо за помощь

Подробнее здесь: https://stackoverflow.com/questions/791 ... -and-cmake
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»