From 8c344cf8fabded65cee42c69f63d2e47b9bef8d3 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Wed, 1 May 2024 15:51:40 +0200 Subject: First build possible --- Makefile | 2 ++ xmake.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2a8759d..fec3007 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,8 @@ OBJ=$(SRC:.cpp=.o) all: $(PROJECTNAME) +LDLIBS += -lfmt + $(PROJECTNAME): $(OBJ) $(CXX) $(LDFLAGS) $^ $(LDLIBS) $(LIBS) -o $@ diff --git a/xmake.cpp b/xmake.cpp index 9d953cc..c1095f4 100644 --- a/xmake.cpp +++ b/xmake.cpp @@ -1,14 +1,19 @@ #include "xmake.h" +#include #include #include #include +#include #include +#include #include #include #include +#include + namespace fs = std::filesystem; namespace bp = boost::process; namespace pt = boost::property_tree; @@ -54,9 +59,51 @@ int xmake(int argc, char* argv[]) // TODO: clearlist // TODO: dependencies // TODO: buildlist + std::string target{ptree.get("xmake.build.name")}; + + std::vector sources; + for (pt::ptree::value_type &v: ptree.get_child("xmake.build")) { + if (v.first == "source") + sources.push_back(v.second.data()); + } + + std::cout << "Target: " << target << std::endl; + + std::cout << "Sources: " << std::endl; + for (auto &i: sources) { + std::cout << " " << i << std::endl; + } + + std::vector commands; + // compile + for (auto &i: sources) { + fs::path p{i}; + commands.push_back(fmt::format("g++ -std=c++17 -c {} -o {}", p.string(), p.replace_extension("o").string())); + } + // link + std::string link_command{"g++"}; + for (auto &i: sources) { + link_command += fmt::format(" {}", fs::path{i}.replace_extension("o").string()); + } + link_command += fmt::format(" -o {}", target); + commands.push_back(link_command); + + std::cout << "Commands: " << std::endl; + for (auto &i: commands) { + std::cout << " " << i << std::endl; + } + + std::cout << "Running commands: " << std::endl; + for (auto &i: commands) { + std::cout << i << std::endl; + int result{system(i.c_str())}; + if (result != 0) { + throw std::runtime_error(fmt::format("Error {}", result)); + } + } } catch (const std::exception& ex) { - std::cerr << "Error: " << ex.what() << std::endl; + std::cerr << "xmake: " << ex.what() << std::endl; return 1; } -- cgit v1.2.3