From a1f4c4a3ea716e186102a03bb443e5a80df3072d Mon Sep 17 00:00:00 2001 From: ackimixs Date: Tue, 21 May 2024 16:11:23 +0200 Subject: [PATCH] more versatile cmake --- CMakeLists.txt | 21 ++++++++++++++----- .../CLParser/include/Modelec/CLParser.h | 5 ++++- components/CLParser/src/CLParser.cpp | 15 +++---------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a7b07b3..1bc0502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.25) -project(ModelecProject VERSION 1.0.0 LANGUAGES CXX DESCRIPTION "Modelec Lib") +project(ModelecProject VERSION 1.1.0 LANGUAGES CXX DESCRIPTION "Modelec Lib") # Define default install path if not provided if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) @@ -9,13 +9,24 @@ endif() # Library and executable paths include(GNUInstallDirs) +# Function to safely add a component +function(add_component component_dir) + if(IS_DIRECTORY ${component_dir}) + if(EXISTS ${component_dir}/CMakeLists.txt) + message(STATUS "Adding component: ${component_dir}") + add_subdirectory(${component_dir}) + else() + message(WARNING "Skipping component: ${component_dir} (no CMakeLists.txt found)") + endif() + else() + message(WARNING "Skipping invalid directory: ${component_dir}") + endif() +endfunction() + # Automatically add subdirectories found in the components directory file(GLOB children RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/components ${CMAKE_CURRENT_SOURCE_DIR}/components/*) foreach(child ${children}) - if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/components/${child}) - message(STATUS "Adding component: ${child}") - add_subdirectory(components/${child}) - endif() + add_component(${CMAKE_CURRENT_SOURCE_DIR}/components/${child}) endforeach() # Configuration for installation and find_package() diff --git a/components/CLParser/include/Modelec/CLParser.h b/components/CLParser/include/Modelec/CLParser.h index b1be5e1..a10edf7 100644 --- a/components/CLParser/include/Modelec/CLParser.h +++ b/components/CLParser/include/Modelec/CLParser.h @@ -5,6 +5,7 @@ #include #include #include +#include class CLParser { @@ -79,8 +80,10 @@ public: ~CLParser(); + + private: - std::string* _argv; + std::vector _argv; int _argc; std::map _options; diff --git a/components/CLParser/src/CLParser.cpp b/components/CLParser/src/CLParser.cpp index 31665ab..a4fc08e 100644 --- a/components/CLParser/src/CLParser.cpp +++ b/components/CLParser/src/CLParser.cpp @@ -1,7 +1,7 @@ #include CLParser::CLParser(int argc, char **argv) : _argc(argc) { - this->_argv = new std::string[argc]; + this->_argv = std::vector(argc); for (int i = 0; i < argc; i++) { this->_argv[i] = argv[i]; } @@ -54,15 +54,6 @@ int CLParser::positionalArgumentsCount() const { return this->_argc; } -CLParser::~CLParser() { - delete[] this->_argv; -} +CLParser::~CLParser() = default; -CLParser::CLParser(const CLParser &other) : _argc(other._argc) { - this->_argv = new std::string[other._argc]; - for (int i = 0; i < other._argc; i++) { - this->_argv[i] = other._argv[i]; - } - - this->_options = other._options; -} \ No newline at end of file +CLParser::CLParser(const CLParser &other) = default; \ No newline at end of file