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