# --------------------------------------------------------------------------- # playground - Superprojekt # # Dieses Verzeichnis ist KEIN Projekt mit eigenem Quellcode. Es haelt nur zwei # eigenstaendige Projekte zusammen: # # libpda/ die Bibliothek -> libpda.a bzw. libpda.dylib # pda/ die Anwendung -> bin/pda # # P1204R0 verlangt genau diese Trennung ("If a project consists of a library # and an executable, then they should be split into separate projects"). Der # Grund ist nicht Ordnungsliebe: die Bibliothek muss OHNE die Anwendung # baubar, testbar und installierbar sein, sonst ist sie keine Bibliothek, # sondern ein Unterverzeichnis. # # Beide Teilprojekte lassen sich einzeln konfigurieren: # # cmake -S libpda -B build/nur-lib && cmake --build build/nur-lib # # Das ist die Probe aufs Exempel. Wenn das bricht, hat die Bibliothek eine # versteckte Abhaengigkeit zur Anwendung. # --------------------------------------------------------------------------- # 3.28 = die CMake-Version aus Ubuntu 24.04 LTS. NICHT auf die lokale 4.4 # hochziehen: das laesst sich auf keinem LTS-Server mehr konfigurieren. cmake_minimum_required(VERSION 3.28) project(playground VERSION 0.1.0 DESCRIPTION "PDA: Bibliothek und Anwendung" LANGUAGES C CXX) # CMAKE_MODULE_PATH ist die Suchliste fuer include() und # find_package( MODULE). Ohne diese Zeile findet include(Warnings) # nichts. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(ProjectDefaults) include(Warnings) include(Sanitizers) # --------------------------------------------------------------------------- # Optionen. option() legt einen Cache-Eintrag an, den man mit -D ueberschreibt: # # cmake --preset debug -DPDA_BUILD_TESTS=OFF # # BUILD_SHARED_LIBS ist eine CMake-Konvention: add_library() ohne STATIC/SHARED # richtet sich danach. Deshalb hier NICHT selbst erfinden, sondern genau diesen # Namen benutzen -- jedes Werkzeug da draussen kennt ihn. # --------------------------------------------------------------------------- option(BUILD_SHARED_LIBS "Bibliothek als Shared Library bauen" OFF) option(PDA_BUILD_TESTS "Unit- und Integrationstests bauen" ON) # enable_testing() gehoert ins OBERSTE CMakeLists.txt und nirgendwo sonst. # Nur hier legt es die CTestTestfile.cmake an, die ctest im Wurzel-Build- # verzeichnis sucht. if(PDA_BUILD_TESTS) enable_testing() endif() add_subdirectory(third_party) add_subdirectory(libpda) add_subdirectory(pda) message(STATUS "playground ${PROJECT_VERSION} | C${CMAKE_C_STANDARD} C++${CMAKE_CXX_STANDARD} | " "${CMAKE_BUILD_TYPE} | ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} | " "shared=${BUILD_SHARED_LIBS} tests=${PDA_BUILD_TESTS}")