qtrocket2/CMakeLists.txt

82 lines
2.5 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(qtrocket LANGUAGES CXX)
# Enable testing
include(CTest)
enable_testing()
# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
# Include directories
include_directories(include)
# Find all source files
file(GLOB_RECURSE SIM_SRC src/*.cpp)
file(GLOB_RECURSE TEST_SRC tests/*.cpp)
# Create the rocket simulator library
add_library(rocketsimlib ${SIM_SRC})
# Main example executable
add_executable(basic_flight_simulation examples/basic_flight_simulation.cpp)
target_include_directories(basic_flight_simulation
PRIVATE /usr/lib/python3.13/site-packages/numpy/_core/include/)
target_link_libraries(basic_flight_simulation PRIVATE rocketsimlib PRIVATE Python3::Python)
# Test executable
add_executable(unit_tests ${TEST_SRC})
target_link_libraries(unit_tests PRIVATE rocketsimlib)
# Register tests with CTest
add_test(NAME UnitTests COMMAND unit_tests)
# ----------------------------------------------------------------------------
# PlantUML documentation generation
# ----------------------------------------------------------------------------
find_program(PLANTUML_EXECUTABLE plantuml DOC "Path to PlantUML executable")
if(PLANTUML_EXECUTABLE)
file(GLOB UML_FILES "${CMAKE_SOURCE_DIR}/docs/*.puml")
foreach(UML_FILE ${UML_FILES})
get_filename_component(UML_NAME ${UML_FILE} NAME_WE)
set(UML_OUTPUT "${CMAKE_SOURCE_DIR}/docs/${UML_NAME}.svg")
add_custom_command(
OUTPUT ${UML_OUTPUT}
COMMAND ${PLANTUML_EXECUTABLE} -tsvg ${UML_FILE}
DEPENDS ${UML_FILE}
COMMENT "Generating UML diagram ${UML_NAME}.svg"
VERBATIM
)
list(APPEND UML_OUTPUTS ${UML_OUTPUT})
endforeach()
add_custom_target(docs_uml ALL DEPENDS ${UML_OUTPUTS})
endif()
# ----------------------------------------------------------------------------
# Doxygen documentation generation
# ----------------------------------------------------------------------------
find_package(Doxygen)
if(DOXYGEN_FOUND)
set(DOXYGEN_IN ${CMAKE_SOURCE_DIR}/Doxyfile)
set(DOXYGEN_OUT ${CMAKE_BINARY_DIR}/Doxyfile.out)
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
add_custom_target(docs_doxygen
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM
)
endif()