diff --git a/src/menu.cc b/src/menu.cc
index f42a8dc..a9eccf0 100644
--- a/src/menu.cc
+++ b/src/menu.cc
@@ -244,6 +244,10 @@ Menu::Menu() {
_Compile
app.compile
+ -
+ _Clean _Project
+ app.clean_project
+
-
diff --git a/src/project.cc b/src/project.cc
index 4decbd7..96d6c1a 100644
--- a/src/project.cc
+++ b/src/project.cc
@@ -147,6 +147,19 @@ void Project::Base::compile_and_run() {
Info::get().print("Could not find a supported project");
}
+void Project::Base::clean_project() {
+ auto default_build_path=build->get_default_path();
+ if(default_build_path.empty() || !build->update_default())
+ return;
+
+ if(Config::get().project.clear_terminal_on_compile)
+ Terminal::get().clear();
+ Terminal::get().print("Cleaning build directory\n");
+ boost::filesystem::remove_all(default_build_path);
+ boost::filesystem::create_directory(default_build_path);
+ Terminal::get().print("Build directory cleaned!\n");
+}
+
std::pair Project::Base::debug_get_run_arguments() {
Info::get().print("Could not find a supported project");
return {"", ""};
diff --git a/src/project.h b/src/project.h
index 6d92112..e1270a1 100644
--- a/src/project.h
+++ b/src/project.h
@@ -43,6 +43,7 @@ namespace Project {
virtual std::pair get_run_arguments();
virtual void compile();
virtual void compile_and_run();
+ virtual void clean_project();
virtual std::pair debug_get_run_arguments();
virtual Gtk::Popover *debug_get_options() { return nullptr; }
diff --git a/src/window.cc b/src/window.cc
index 364225d..40a58f3 100644
--- a/src/window.cc
+++ b/src/window.cc
@@ -855,6 +855,19 @@ void Window::set_menu_actions() {
Project::current->compile();
});
+ menu.add_action("clean_project", [this]() {
+ if(Project::compiling || Project::debugging) {
+ Info::get().print("Compile or debug in progress");
+ return;
+ }
+
+ Project::current=Project::create();
+
+ if(Config::get().project.save_on_compile_or_run)
+ Project::save_files(Project::current->build->project_path);
+
+ Project::current->clean_project();
+ });
menu.add_action("run_command", [this]() {
EntryBox::get().clear();