将 Google Test 与 Cmake 集成构建错误:没有这样的文件或目录错误

问题描述 投票:0回答:1

您好,我正在使用 cmake 集成 Gtest 并对示例 C 代码执行测试。 我使用 GCC 13.2.0 x86_64-mingw32(mingw64) 和 VScode。 下面我提到了目录结构以及根cmakelist和子级cmakelist。

目录结构:

.
├── CMakeLists.txt 
├── googletest
├── sourcecode
│   ├── CMakeLists.txt
│   └── calculator.c , calculator.h           
│    
└── testSource
    ├── CMakeLists.txt
    └── calculator_test.cpp

MakeLists.txt

        cmake_minimum_required(VERSION 3.8) 
        set(This NAME_FOR_PROJECT) 
        project(${This} C CXX) 
        project(${This} VERSION 1.0.0)
        set(CMAKE_C_STANDARD 99) 
        set(CMAKE_C_STANDARD_REQUIRED ON) 
        set(CMAKE_CXX_STANDARD_REQUIRED ON) 
        set(CMAKE_CXX_STANDARD 11)
        set (CMAKE_POSITION_INDEPENDENT_CODE ON) 

        include(CTest)
        enable_testing() 

        add_subdirectory(googletest) 
        add_subdirectory(sourcecode)
        add_subdirectory(testSource) 

源代码/MakeLists.txt

        set(This Sourcecodes)

        set(Sources
        calculator.c
        )

        set(Headers 
        calculator.h
        )
        add_library(${This}   SHARED  ${Sources}  ${Headers})  

testSource/MakeLists.txt

        cmake_minimum_required(VERSION 3.8) 
        set(This gtestSources) 

        set(Sources 
        exampletest.cpp )

        add_executable(${This} ${Sources})
        target_link_libraries(${This} PUBLIC 
        gtest_main 
        Sourcecodes
        )

        target_include_directories(${This}  PUBLIC sourcecode)
        target_link_directories(${This} PUBLIC  sourcecode) 

        add_test(
        NAME ${This}
        COMMAND ${This}
        )

测试源/calculator_test.cpp

        #include<gtest/gtest.h>
        #include<sourcecode/example.h>
        TEST(Exampletest, Exampletest_calculator){
        EXPECT_EQ(calculator('+',4,5), 9);
        EXPECT_EQ(calculator('+',4,5), 10);
        }

测试源/计算器.h

        #include<stdio.h>
        float calculator (char op, int num1, int num2);

构建后,我收到错误致命错误:calculator.h:没有这样的文件或目录

有人可以让我知道我在这里缺少什么吗?

c++ c visual-studio-code googletest
1个回答
1
投票

问题是测试确实看到了来自

Sourcecodes
目标的 proepr 包含目录。 要修复它,您应该将 public incldue 目录添加到
Sourcecodes
目标:

添加到

sourcecode/CMakeLists.txt

target_include_directories(Sourcecodes PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

这意味着将当前源目录添加为将链接的任何目标的包含目录

Sourcecodes

详情请参阅doc

请注意,在

testSource/MakeLists.txt
中,您错误地使用了
target_include_directories


旁注:

  • 这个
    ${This}
    变量已过时。它使 cmake 代码变得更加复杂,但没有任何好处。
  • 检查如何使用project
© www.soinside.com 2019 - 2024. All rights reserved.