Почему мой проект ломается и не компилируется при перемещении проекта модульного теста, который я сделал с помощью CMake - PullRequest
0 голосов
/ 08 февраля 2020

Итак, я следовал учебнику Введение в Google Test и CMake , который работал нормально. Но когда я перемещаю папку проекта в другой каталог, проект ломается и выдает мне эту ошибку:

FAILED: test/ExampleTests.exe
.
.
.
[build] LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use 
/NODEFAULTLIB:library
[build] test\ExampleTests.exe : fatal error LNK1169: one or more multiply defined symbols found
[build] ninja: build stopped: subcommand failed.
[build] Build finished with exit code 1

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

Я переместил папку из Desktop\Example в Desktop\HelloWorld\Example. Я попытался удалить созданную папку сборки и снова нажать F7, но она продолжала выдавать ошибку.

Структура папки

build\
googletest\
test\
    |CMakeLists.txt
    | ExampleTests.cpp
CMakeLists.txt
Example.cpp
Example.hpp

CMakeLists.txt :

cmake_minimum_required(VERSION 3.12) 
set(This Example) 
project(${This} C CXX) 
set(CMAKE_C_STANDARD 99) 
set(CMAKE_CXX_STANDARD 11) 
set(CMAKE_POSITION_INDEPENDENT_CODE ON) 
enable_testing() 
add_subdirectory(googletest) 
set(Headers Example.hpp 
) 
set(Sources Example.cpp 
) 
add_library(${This} STATIC ${Sources} ${Headers}) 
add_subdirectory(test)

test \ CMakeLists.txt :

cmake_minimum_required(VERSION 3.12)
set(This ExampleTests)
set(Sources
    ExampleTests.cpp
)
add_executable(${This} ${Sources})
target_link_libraries(${This} PUBLIC
    gtest_main
    Example
)
add_test(
    NAME ${This}
    COMMAND ${This}
)

ExampleTests. cpp:

#include <gtest/gtest.h>
TEST(ExampleTest, blah)
{
    ASSERT_EQ(true, true);
}

Пример. cpp:

#include "Example.hpp"
void Example::test()
{
    int x = 5;
}

Example.hpp :

#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
class Example
{
    public:
        void test();
};
#endif

1 Ответ

0 голосов
/ 13 февраля 2020

Поэтому я попросил оригинального загрузчика видео, на которое я ссылался, найти решение, и это решило мою проблему.

Перемещение его в другую папку обычно приводит к поломке, если вы не очистите папку сборки (просто удалите его или не перемещайте вместе с остальными файлами). Папка сборки содержит промежуточные продукты сборки, в которых есть пути, а также кэш CMake (CMakeCache.txt), который также содержит имена путей.

Когда я перехожу в другой каталог, я просто перемещаю все файлы, за исключением папки для сборки, как он сказал, открыли VS Code и скомпилировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...