Project

General

Profile

Actions

Support Request #16426

closed

Using catch2 with conan and cmake

Added by hidden over 2 years ago. Updated about 1 year ago.

Status:
Closed
Priority:
Normal
Customer:
CARIAD
Department:
G3-6
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::ConanCMakeMisc
FAQ Links:

Description

Supportanfrage

bei uns wurde Catch2 als Alternative zu gtest evaluiert.
Wir haben dabei catch2/2.13.7@dw/stable<mailto:catch2/2.13.7@dw/stable> genutzt.

Damit ein find_package(Catch2) funktioniert, muss der Conan generator cmake_find_package (cmake_find_package generator - conan 1.44.1 documentation<https://docs.conan.io/en/latest/integrations/build_system/cmake/cmake_find_package_generator.html&gt;) genutzt werden.
Der wesentliche Nachteil dabei ist, dass viele andere Pakete eine *Config.cmake enthalten. Diese Dateien der anderen werden durch den generator cmake_find_package ausgeblendet.
Um die ausgeblendeten Dateien wieder auffindbar zu machen, muss für andere Pakete find_package(MyOtherPackage CONFIG) aufgerufen werden.
Dieser Seiteneffekt fühlt sich merkwürdig an, insbesondere, weil Catch2 offenbar auch ein Config-File bereitzustellen scheint: https://github.com/catchorg/Catch2/blob/v2.13.7/CMake/Catch2Config.cmake.in

Gibt es einen Grund, warum es das Config-File von Catch2 es nicht ins Conan-Paket geschafft hat?
Wir sind am überlegen, ob es sinnvoll ist, Catch2 neu zu verpacken, um das fehlende Config-File zu ergänzen.
Dann könnten wir auf den cmake_find_package Generator und seine Seiteneffekte verzichten.
Gibt es Eurerseits Pläne, das File zu künftig zu integrieren?

Lösung

das Problem ist uns bekannt, conan und cmake sind hier nur bedingt kombinierbar, zumindest out of the box...
Wir verwenden das catch2 Paket 1:1 aus dem conan center (redeploy) und dort ist keine cmake Kompatibilität gewährleistet.

Wenn du im ADTF Kontext unterwegs bist, kannst du auch catch2 innherhalb des testing packages von ADTF verwenden, das liefern wir mit.
Beispiel tests findest du in den examples, da gibts dann auch passende cmake Makros von uns, inklusive testbarkeit für UI adtfplugins.
Im Prinzip machst du nur folgendes:

find_package(ADTF COMPONENTS testing)

adtf_add_catch_test(NAME test_plugin
    TIMEOUT 10
    SOURCES test_code.cpp
)

Wenn du catch2 standalone oder allgemein verwenden willst ohne ADTF, dann nutzen wir den cmake_find_package Generator so (wenn wir ADTF File Plugins zb schreiben):

def removeFindPackage(self, name):
    file_name = self.build_folder + "/" + name
    if os.path.isfile(file_name):
        os.remove(file_name)

def cmake_factory(self):
    if not self.cmake:
        self.cmake = CMake(self)

        # these are proper cmake packages so we do not need the conan generated find scripts
        self.removeFindPackage("Findifhd.cmake")
        self.removeFindPackage("Finddev_essential.cmake")

        # ...

Das sollte dir bei derartigen Problemen unabhängig von diesen spezifischen paket helfen, dann bist du davon unabhängig...

Actions #1

Updated by hidden over 2 years ago

  • Project changed from Public Support to 30
  • Status changed from New to In Progress
  • Customer set to CARIAD
  • Department set to G3-6
  • Topic set to ADTF::ConanCMakeMisc
Actions #3

Updated by hidden over 2 years ago

  • Status changed from In Progress to Customer Feedback Required

Hi Jens,

das Problem ist uns bekannt, conan und cmake sind hier nur bedingt kombinierbar, zumindest out of the box...
Wir verwenden das catch2 Paket 1:1 aus dem conan center (redeploy) und dort ist keine cmake Kompatibilität gewährleistet.

Wenn du im ADTF Kontext unterwegs bist, kannst du auch catch2 innherhalb des testing packages von ADTF verwenden, das liefern wir mit.
Beispiel tests findest du in den examples, da gibts dann auch passende cmake Makros von uns, inklusive testbarkeit für UI adtfplugins.
Im Prinzip machst du nur folgendes:

find_package(ADTF COMPONENTS testing)

adtf_add_catch_test(NAME test_plugin
    TIMEOUT 10
    SOURCES test_code.cpp
)

Wenn du catch2 standalone oder allgemein verwenden willst ohne ADTF, dann nutzen wir den cmake_find_package Generator so (wenn wir ADTF File Plugins zb schreiben):

def removeFindPackage(self, name):
    file_name = self.build_folder + "/" + name
    if os.path.isfile(file_name):
        os.remove(file_name)

def cmake_factory(self):
    if not self.cmake:
        self.cmake = CMake(self)

        # these are proper cmake packages so we do not need the conan generated find scripts
        self.removeFindPackage("Findifhd.cmake")
        self.removeFindPackage("Finddev_essential.cmake")

        # ...

Das sollte dir bei derartigen Problemen unabhängig von diesen spezifischen paket helfen, dann bist du davon unabhängig...

Hilft dir das weiter ?

Actions #4

Updated by hidden over 2 years ago

Den Weg, generierte Dateien im Nachgang zu löschen, finde ich offen gestanden noch weniger elegant, als den Parameter CONFIG in find_package für andere Pakete zu ergänzen (ggf. auch für transitive Abhängigkeiten).

Danke für die Antwort, sie hilft mir weiter :)

Gruß, Jens

Actions #5

Updated by hidden over 2 years ago

  • Description updated (diff)
  • Status changed from Customer Feedback Required to To Be Closed
  • Resolution set to Solved Issue
  • Affected Products ADTF 3.13.2 added
  • Platform Windows 10 64bit added
Actions #6

Updated by hidden over 2 years ago

  • Status changed from To Be Closed to In Progress

@Martin: hast du noch Anmerkungen dazu bzw Tasks für uns zum ableiten?

Actions #7

Updated by hidden over 2 years ago

@Flo, ich denke nicht.

Actions #8

Updated by hidden over 2 years ago

  • File deleted (image002.png)
Actions #9

Updated by hidden over 2 years ago

  • Project changed from 30 to Public Support
  • Subject changed from Catch2 Conan Package: CMake find_package to Using catch2 with conan and cmake
  • Status changed from In Progress to To Be Closed
  • Private changed from Yes to No
Actions #10

Updated by hidden about 2 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF