C++ 为什么我的项目失败了并且没有';当移动我用CMake制作的单元测试项目时,我不会编译

C++ 为什么我的项目失败了并且没有';当移动我用CMake制作的单元测试项目时,我不会编译,c++,visual-studio-code,cmake,C++,Visual Studio Code,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 LNK116

所以我学习了一个教程,效果很好。但是,当我将项目文件夹移动到另一个目录时,项目中断并出现以下错误:

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)
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}
)
#include <gtest/gtest.h>
TEST(ExampleTest, blah)
{
    ASSERT_EQ(true, true);
}
#include "Example.hpp"
void Example::test()
{
    int x = 5;
}
#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
class Example
{
    public:
        void test();
};
#endif
测试\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)
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}
)
#include <gtest/gtest.h>
TEST(ExampleTest, blah)
{
    ASSERT_EQ(true, true);
}
#include "Example.hpp"
void Example::test()
{
    int x = 5;
}
#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
class Example
{
    public:
        void test();
};
#endif
示例测试.cpp

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)
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}
)
#include <gtest/gtest.h>
TEST(ExampleTest, blah)
{
    ASSERT_EQ(true, true);
}
#include "Example.hpp"
void Example::test()
{
    int x = 5;
}
#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
class Example
{
    public:
        void test();
};
#endif
示例.hpp

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)
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}
)
#include <gtest/gtest.h>
TEST(ExampleTest, blah)
{
    ASSERT_EQ(true, true);
}
#include "Example.hpp"
void Example::test()
{
    int x = 5;
}
#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
class Example
{
    public:
        void test();
};
#endif

所以我向我链接的视频的原始上传者寻求解决方案,这就解决了我的问题

将它移动到另一个文件夹通常会破坏一些东西,除非您清除生成文件夹(只需删除它或不将其与其余文件一起移动)。build文件夹包含包含路径名的中间生成产品,以及同样包含路径名的CMake缓存(CMakeCache.txt)


当我移动到另一个目录时,我只移动所有的文件,除了他所说的构建文件夹,打开VS代码并编译。

你能同时粘贴你的Example.cpp和Example.hpp吗?@theWiseBro更新了。从内存中写的,我现在不在我的开发计算机上。它应该是#define EXAMPLE_HPP。也许是打字错误?这肯定会导致这个多定义错误。@theWiseBro很抱歉,这是从内存中键入的一个输入错误。听起来你的配置不知何故被破坏了。是否确实正在生成在新生成目录位置生成的项目<代码>桌面\HelloWorld\Example\build