Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use File::Find;
- use File::Basename;
- use File::Path qw(make_path remove_tree);
- use strict;
- my ($sourceDir) = @ARGV;
- my %srcs;
- sub findItem {
- my $n = $_;
- my %objSrc = (); # foo -> src/foo.cpp
- my $p = $File::Find::name;
- if ( -f && $p =~ /\.cpp$/ ) {
- my $bn = basename($n,".cpp");
- my $b = $bn;
- my $i = 1;
- while (exists($objSrc{$b})) {
- $b = $bn . $i;
- $i++;
- }
- $srcs{$b} = $p;
- }
- }
- sub dsts {
- my ($dest,%s) = @_;
- my %result = ();
- for my $k (keys %s) {
- $result{$k} = $dest . '/' . $k . ".o";
- }
- return %result;
- }
- find(\&findItem, $sourceDir);
- my %debugDsts = dsts('debug',%srcs);
- my %releaseDsts = dsts('release',%srcs);
- my @opts = ('CXX','CXXFLAGS_DEBUG','CXXFLAGS_RELEASE','INCPATH','LINK','LFLAGS_DEBUG','LFLAGS_RELEASE','BINARY_DEBUG','BINARY_RELEASE','LIBS','DEL_FILE');
- my %opts_ = ('CXX' => 'g++','LINK' => 'g++','DEL_FILE'=>'del /f ','CXXFLAGS_DEBUG' => '-g');
- for my $opt (@opts) {
- my $v = '';
- if (exists($opts_{$opt})) {
- $v = $opts_{$opt};
- }
- print $opt . "=" . $v . "\n";
- }
- print "\n";
- my $debugObjects = join(" ", values %debugDsts);
- my $releaseObjects = join(" ", values %releaseDsts);
- print 'all: $(BINARY_DEBUG) $(BINARY_RELEASE)' . "\n\n";
- print 'debug: $(BINARY_DEBUG)' . "\n\n";
- print 'release: $(BINARY_RELEASE)' . "\n\n";
- print '$(BINARY_DEBUG): ' . $debugObjects . "\n";
- print "\t" . '$(LINK) $(LFLAGS_DEBUG) -o $(BINARY) ' . $debugObjects . ' $(LIBS)' . "\n\n";
- print '$(BINARY_RELEASE): ' . $releaseObjects . "\n";
- print "\t" . '$(LINK) $(LFLAGS_RELEASE) -o $(BINARY) ' . $releaseObjects . ' $(LIBS)' . "\n\n";
- for my $b (keys %srcs) {
- print $debugDsts{$b} . ": " . $srcs{$b} . "\n";
- print "\t" . '$(CXX) -c $(CXXFLAGS_DEBUG) $(INCPATH) -o $@ $<' . "\n\n";
- }
- for my $b (keys %srcs) {
- print $releaseDsts{$b} . ": " . $srcs{$b} . "\n";
- print "\t" . '$(CXX) -c $(CXXFLAGS_RELEASE) $(INCPATH) -o $@ $<' . "\n\n";
- }
- my $objectsWin = $debugObjects . ' ' . $releaseObjects;
- $objectsWin =~ s,/,\\,g;
- print 'clean: ' . "\n\t" . '$(DEL_FILE) ' . $objectsWin;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement