Advertisement
overloop

butcher.pl

Sep 30th, 2015
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.21 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use File::Find;
  3. use File::Basename;
  4. use File::Path qw(make_path remove_tree);
  5.  
  6. my ($sourceDir,$buildDir) = @ARGV;
  7.  
  8. my %objDst = (); # foo -> debug/foo.o
  9. my %objSrc = (); # foo -> src/foo.cpp
  10.  
  11. sub findItem {
  12.   my $n = $_;
  13.   my $p = $File::Find::name;
  14.   if ( -f && $p =~ /\.cpp$/ ) {
  15.       $bn = basename($n,".cpp");
  16.       my $b = $bn;
  17.       my $i = 1;
  18.       while (exists($objPath{$b})) {
  19.         $b = $bn . $i;
  20.         $i++;
  21.       }
  22.       $objSrc{$b} = $p;
  23.       $objDst{$b} = $buildDir . "/" . $b . ".o";
  24.   }
  25. }
  26.  
  27. find(\&findItem, $sourceDir);
  28.  
  29. my %opts = ('CXX' => 'g++','CXXFLAGS' => '','INCPATH' => '','LINK' => 'g++',
  30.   ,'LFLAGS'=>'','BINARY' => '','LIBS'=> '','DEL_FILE' => 'del');
  31.  
  32. print $_ . "=" . $opts{$_} . "\n" foreach keys %opts;
  33. print "\n";
  34.  
  35. my $objects = join(" ", values %objDst);
  36. print '$(BINARY): ' . $objects . "\n";
  37. print "\t" . '$(LINK) $(LFLAGS) -o $(BINARY) ' . $objects . ' $(LIBS)' . "\n\n";
  38.  
  39. for my $b (keys %objDst) {
  40.   print $objDst{$b} . ": " . $objSrc{$b} . "\n";
  41.   print "\t" . '$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<' . "\n\n";
  42. }
  43.  
  44. my $objectsWin = $objects;
  45. $objectsWin =~ s,/,\\,g;
  46.  
  47. print 'clean: ' . "\n\t" . '$(DEL_FILE) ' . $objectsWin;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement