From 0c5b288833221184cf53ccf7804ed4e7ec34b8f1 Mon Sep 17 00:00:00 2001 From: user Date: Sun, 19 Jul 2026 17:53:57 +0400 Subject: [PATCH] feat: add shared library build and example application --- app/Makefile | 41 +++++++++++++++++++++++++++++++++++++++ app/src/main.cpp | 17 ++++++++++++++++ logger/Makefile | 40 ++++++++++++++++++++++++++++++++++++++ logger/include/export.hpp | 7 +++++++ logger/include/logger.hpp | 3 ++- 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 app/Makefile create mode 100644 app/src/main.cpp create mode 100644 logger/Makefile create mode 100644 logger/include/export.hpp diff --git a/app/Makefile b/app/Makefile new file mode 100644 index 0000000..502fd32 --- /dev/null +++ b/app/Makefile @@ -0,0 +1,41 @@ +ROOT_DIR := $(abspath ..) + +CC := gcc + +CXXFLAGS := -std=c++17 \ + -Wall \ + -Wextra \ + -Werror \ + -I$(ROOT_DIR)/core/include \ + -I$(ROOT_DIR)/logger/include + +LDFLAGS := -L$(ROOT_DIR)/build \ + -llogger \ + -lstdc++ \ + -Wl,-rpath,$(ROOT_DIR)/build + +BUILD_DIR := $(ROOT_DIR)/build + +TARGET := $(BUILD_DIR)/logger_app + +SRC := src/main.cpp + + +.PHONY: all clean + + +all: $(TARGET) + + +$(TARGET): $(SRC) + @mkdir -p $(BUILD_DIR) + + $(CC) \ + $(CXXFLAGS) \ + $< \ + -o $@ \ + $(LDFLAGS) + + +clean: + rm -f $(TARGET) diff --git a/app/src/main.cpp b/app/src/main.cpp new file mode 100644 index 0000000..460b9b3 --- /dev/null +++ b/app/src/main.cpp @@ -0,0 +1,17 @@ +#include + +#include "logger.hpp" + +int main() { + logger::Logger logger("app.log", logger::LogLevel::info()); + + auto status = logger.writeMessage("Hello from shared library"); + + if (!status.isSuccess()) { + std::cerr << status.getError() << '\n'; + + return 1; + } + + return 0; +} diff --git a/logger/Makefile b/logger/Makefile new file mode 100644 index 0000000..5550633 --- /dev/null +++ b/logger/Makefile @@ -0,0 +1,40 @@ +ROOT_DIR := $(abspath ..) + +CC := gcc + +CXXFLAGS := -std=c++17 \ + -Wall \ + -Wextra \ + -Werror \ + -fPIC \ + -I$(ROOT_DIR)/core/include \ + -Iinclude + +LDFLAGS := -lstdc++ + +BUILD_DIR := $(ROOT_DIR)/build + +TARGET := $(BUILD_DIR)/liblogger.so + +SRC := src/logger.cpp + + +.PHONY: all clean + + +all: $(TARGET) + + +$(TARGET): $(SRC) + @mkdir -p $(BUILD_DIR) + + $(CC) \ + $(CXXFLAGS) \ + -shared \ + $< \ + -o $@ \ + $(LDFLAGS) + + +clean: + rm -f $(TARGET) diff --git a/logger/include/export.hpp b/logger/include/export.hpp new file mode 100644 index 0000000..2460851 --- /dev/null +++ b/logger/include/export.hpp @@ -0,0 +1,7 @@ +#pragma once + +#if defined(_WIN32) +#define LOGGER_API __declspec(dllexport) +#else +#define LOGGER_API __attribute__((visibility("default"))) +#endif diff --git a/logger/include/logger.hpp b/logger/include/logger.hpp index 2864a9a..37f0662 100644 --- a/logger/include/logger.hpp +++ b/logger/include/logger.hpp @@ -2,6 +2,7 @@ #include +#include "export.hpp" #include "log_level.hpp" #include "result.hpp" @@ -19,7 +20,7 @@ namespace logger { * Методы with* используют неизменяемый подход: * они создают новый экземпляр Logger с изменённой конфигурацией. */ -class Logger { +class LOGGER_API Logger { public: /** * @brief Создаёт объект логгера.