diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | libcppbuild.cc | 32 | 
2 files changed, 27 insertions, 7 deletions
| @@ -5,7 +5,7 @@ libcppbuild.a: libcppbuild.cc  	ar rcs libcppbuild.a libcppbuild.o  cppbuild: cppbuild.cc libcppbuild.a -	g++ -g -std=c++17 cppbuild.cc libcppbuild.a -o cppbuild +	g++ -g -std=c++17 cppbuild.cc libcppbuild.a -pthread -o cppbuild  clean:  	rm -f cppbuild libcppbuild.o libcppbuild.a diff --git a/libcppbuild.cc b/libcppbuild.cc index ff208b3..ddc0b66 100644 --- a/libcppbuild.cc +++ b/libcppbuild.cc @@ -5,6 +5,8 @@  #include <fstream>  #include <regex>  #include <utility> +//#include <thread> +#include <future>  #include "libcppbuild.h" @@ -102,6 +104,8 @@ int main(int argc, const char* argv[])  	const auto& files = project.sources;  	std::vector<std::string> objects; +	std::vector<std::future<int>> tasks; +  	std::cout << "Building\n";  	for(const auto& file : files)  	{ @@ -154,12 +158,28 @@ int main(int argc, const char* argv[])  		   std::filesystem::last_write_time(file) >  		   std::filesystem::last_write_time(object))  		{ -			std::string compiler = "g++ -MMD -c " + file + " -o " + object; -			std::cout << compiler << "\n"; -			if(system(compiler.data())) -			{ -				return 1; -			} + +			tasks.emplace_back( +				std::async(std::launch::async, +				           [file, object]() +				           { +					           std::string compiler = "g++ -MMD -c " + file + " -o " + object; +					           std::cout << compiler << "\n"; +					           if(system(compiler.data())) +					           { +						           return 1; +					           } +					           return 0; +				           })); +		} +	} + +	for(auto& task : tasks) +	{ +		task.wait(); +		if(task.get() != 0) +		{ +			return 1;  		}  	} | 
