es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de compilación de Catch2 (no se encuentra el archivo o directorio)

Ya he utilizado Catch2 para pruebas con éxito, pero esta vez ocurrió un problema. Estoy agregando un submódulo de Catch2 a mi proyecto (esto no es una rama -v2.x) e incluyo “../Catch2/src/catch2/catch_all.hpp” en mis archivos de prueba. El problema es que en catch_all.hpp no se encuentran todos los archivos .hpp incluidos (como <catch2/benchmark/catch_benchmark_all.hpp>, <catch2/catch_approx.hpp> y así sucesivamente). He revisado las rutas, pero parecen estar bien. ¿Alguna idea de qué está mal?
Aquí hay un ejemplo de mi código.

Estoy agregando un submódulo de Catch2 con el comando

git submodule add https://github.com/catchorg/Catch2.git

CMakeFile.txt:

cmake<em>minimum</em>required(VERSION 3.20)
project(proj)

<p>set(CMAKE<em>CXX</em>STANDARD 17)</p>

<p>set (sources
        ./main.cpp
        ./test_main.cpp
        ./test.cpp)</p>

<p>add<em>executable(mainApp ${sources})
target</em>compile<em>options(mainApp PRIVATE -Wall -pedantic -std=c++17)
target</em>link_libraries(mainApp)</p>

<p>set (tests
        ./test_main.cpp
        ./test.cpp)</p>

<p>add<em>subdirectory(Catch2)
add</em>executable(runTests ${tests})
target<em>compile</em>options(mainApp PRIVATE -g)
target<em>link</em>libraries(runTests PRIVATE Catch2::Catch2WithMain)

test_main.cpp:


<h1>define CATCH<em>CONFIG</em>MAIN</h1> <h1>include"Catch2/src/catch2/catch_all.hpp"</h1>

test.cpp:


<h1>include"Catch2/src/catch2/catch_all.hpp"</h1> TEST<em>CASE("BasicTest</em>1", "FirstTest") { REQUIRE(1 == 1); }

El main.cpp es solo un simple helloworld por ahora.

TEST_CASE tampoco funciona, dice “C ++ requiere un especificador de tipo para todas las declaraciones”.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema radica en la forma en que estás incluyendo los archivos de encabezado en tus archivos de prueba. En lugar de usar “../../Catch2/src/catch2/catch_all.hpp”, intenta usar “catch2/catch_all.hpp” al incluir los archivos de encabezado en tus archivos de prueba. Esto se debe a que cuando agregas el submódulo Catch2, se crea una ruta al submódulo en el directorio de tu proyecto.

    Entonces, tu archivo principal debería incluir Catch2 de la siguiente manera:

    #include "catch2/catch_all.hpp"

    y tus archivos de prueba deben incluir el archivo de encabezado de esta manera:

    #include "catch2/catch_all.hpp"

    Esto debería resolver tu problema de no poder encontrar los archivos de encabezado.

Comments are closed.