簡體   English   中英

為什么我的項目在移動我用 CMake 制作的單元測試項目時會中斷並且無法編譯

[英]Why does my project break and doesn't compile when moving a unit test project I made with CMake

因此,我遵循了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\\ExampleDesktop\\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)

測試\\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;
}

示例.hpp

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

所以我詢問了我鏈接到的視頻的原始上傳者以尋求解決方案,這解決了我的問題。

將它移動到另一個文件夾通常會破壞事情,除非您清理構建文件夾(只需刪除它或不要將它與其余文件一起移動)。 構建文件夾包含其中包含路徑名的中間構建產品,以及也包含路徑名的 CMake 緩存 (CMakeCache.txt)。

當我移動到另一個目錄時,我只是移動了所有文件,除了他所說的構建文件夾之外,打開了 VS Code 並進行了編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM