⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gnuaceworkspacecreator.pm

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 PM
字号:
package GNUACEWorkspaceCreator;# ************************************************************# Description   : A GNU Workspace (GNUmakefile) creator for ACE# Author        : Chad Elliott# Create Date   : 5/13/2002# ************************************************************# ************************************************************# Pragmas# ************************************************************use strict;use File::Basename;use GNUACEProjectCreator;use WorkspaceCreator;use vars qw(@ISA);@ISA = qw(WorkspaceCreator);# ************************************************************# Data Section# ************************************************************my($base) = 'GNUmakefile';# ************************************************************# Subroutine Section# ************************************************************sub generate_implicit_project_dependencies {  #my($self) = shift;  return 1;}sub workspace_file_name {  my($self) = shift;  return $self->get_modified_workspace_name($base, '');}sub workspace_per_project {  #my($self) = shift;  return 1;}sub pre_workspace {  my($self) = shift;  my($fh)   = shift;  my($crlf) = $self->crlf();  print $fh '# -*- makefile -*-', $crlf,            '#-------------------------------------------------------------------------', $crlf,            '#       GNU ACE Workspace', $crlf,            '#', $crlf,            '# GNUACEWorkspaceCreator.pm,v 1.36 2006/01/24 12:55:22 elliott_c Exp', $crlf,            '#', $crlf,            '# This file was generated by MPC.  Any changes made directly to', $crlf,            '# this file will be lost the next time it is generated.', $crlf,            '#', $crlf,            '# MPC Command:', $crlf,            "# $0 @ARGV", $crlf,            '#', $crlf,            '#-------------------------------------------------------------------------', $crlf,            'MAKEFILE = ', $self->get_modified_workspace_name($base, '', 1),            $crlf;}sub write_comps {  my($self)    = shift;  my($fh)      = shift;  my($crlf)    = $self->crlf();  my(%targnum) = ();  my($pjs)     = $self->get_project_info();  my($named)   = (defined $ENV{MPC_GNUACE_NAMED_TARGETS});  my(@list)    = $self->number_target_deps($self->get_projects(),                                           $pjs, \%targnum,                                           $named ? 0 : 1);  ## Print out some preliminary information  print $fh $crlf,            "ifeq (\$(findstring k,\$(MAKEFLAGS)),k)$crlf",            "  KEEP_GOING = -$crlf",            "endif$crlf$crlf",            "include \$(ACE_ROOT)/include/makeinclude/macros.GNU$crlf",            $crlf;  if ($named) {    $self->write_named_targets($fh, $crlf, \%targnum, \@list);  }  else {    ## Determine the ordering of the sub-directories    my(@dirs)  = ();    my(%found) = ();    foreach my $file (reverse @list) {      my($dir) = $self->get_first_level_directory($file);      if ($dir ne '.') {        if (!defined $found{$dir}) {          $found{$dir} = 1;          unshift(@dirs, $dir);        }      }    }    my($need_dirs) = ($#dirs > -1);    ## Store the local projects in a separate list    my(@lprj)   = ();    my(%dirprj) = ();    foreach my $project (@list) {      if ($project !~ /\//) {        push(@lprj, $project);        if ($need_dirs && defined $targnum{$project}) {          foreach my $number (@{$targnum{$project}}) {            if ($list[$number] =~ /\//) {              ## If any local project depends on a project that is not              ## in this directory, we can not rely on the directory              ## recursion to get the correct dependencies.  We will do              ## all projects as local targets.              @lprj = ();              foreach my $prj (@list) {                push(@lprj, $prj);                if ($prj =~ /\//) {                  $dirprj{$prj} = 1;                }              }              $need_dirs = 0;              last;            }          }          if (!$need_dirs) {            last;          }        }      }    }    if ($#lprj >= 0) {      ## Print out the all target first.  This will allow multiple projects      ## within the same directory to build in parallel.      print $fh 'all:';      foreach my $project (@lprj) {        print $fh ' ', $$pjs{$project}->[0];      }      print $fh $crlf;      if ($need_dirs) {        foreach my $dir (@dirs) {          print $fh "\t\$(KEEP_GOING)\@cd $dir && ",                    "\$(MAKE) -f \$(MAKEFILE) \$(\@)$crlf";        }      }      ## Print out each target separately.  Make can decide on which      ## targets can be built in parallel because we add the local      ## dependencies.      foreach my $project (@lprj) {        print $fh $crlf, '.PHONY: ', $$pjs{$project}->[0],                  $crlf, $$pjs{$project}->[0], ':';        if (defined $targnum{$project}) {          foreach my $number (@{$targnum{$project}}) {            print $fh ' ', $$pjs{$list[$number]}->[0];          }        }        print $fh $crlf,                  "\t\$(KEEP_GOING)\@";        if (defined $dirprj{$project}) {          print $fh "cd ", $self->mpc_dirname($project),                    " && \$(MAKE) -f ", basename($project), $crlf;        }        else {          print $fh "\$(MAKE) -f $project$crlf";        }      }      print $fh $crlf,                'REMAINING_TARGETS := ',                '$(subst all, , $(TARGETS_NESTED:.nested=)) $(CUSTOM_TARGETS)',                $crlf;    }    else {      print $fh 'REMAINING_TARGETS := $(TARGETS_NESTED:.nested=) ',                '$(CUSTOM_TARGETS)', $crlf;    }    ## Print out the remaing targets.    ## They will be handled serially by make.    print $fh "\$(REMAINING_TARGETS):$crlf";    foreach my $project (@lprj) {      print $fh "\t\$(KEEP_GOING)\@";      if (defined $dirprj{$project}) {        print $fh "cd ", $self->mpc_dirname($project),                  " && \$(MAKE) -f ", basename($project), " \$(\@)", $crlf;      }      else {        print $fh "\$(MAKE) -f $project \$(\@)$crlf";      }    }    if ($need_dirs) {      foreach my $dir (@dirs) {        print $fh "\t\$(KEEP_GOING)\@cd $dir && ",                  "\$(MAKE) -f \$(MAKEFILE) \$(\@)$crlf";      }    }    print $fh $crlf;  }}sub write_named_targets {  my($self)    = shift;  my($fh)      = shift;  my($crlf)    = shift;  my($targnum) = shift;  my($list)    = shift;  my($trans)   = $self->project_target_translation(1);  ## Print out the "all" target  print $fh 'all:';  foreach my $project (@$list) {    print $fh " $$trans{$project}";  }  ## Print out all other targets here  print $fh $crlf,            'REMAINING_TARGETS := ',            '$(subst all, , $(TARGETS_NESTED:.nested=)) $(CUSTOM_TARGETS)',            "$crlf$crlf\$(REMAINING_TARGETS):$crlf";  foreach my $project (@$list) {    my($dname) = $self->mpc_dirname($project);    print $fh "\t\@",              ($dname ne '.' ? "cd $dname && " : ''),              "\$(MAKE) -f ",              ($dname eq '.' ? $project : basename($project)),              " \$(\@)$crlf";  }  ## Print out each target separately  foreach my $project (@$list) {    my($dname) = $self->mpc_dirname($project);    print $fh $crlf, '.PHONY: ', $$trans{$project},              $crlf, $$trans{$project}, ':';    if (defined $$targnum{$project}) {      foreach my $number (@{$$targnum{$project}}) {        print $fh " $$trans{$$list[$number]}";      }    }    print $fh $crlf,              "\t\@",              ($dname ne '.' ? "cd $dname && " : ''),              "\$(MAKE) -f ",              ($dname eq '.' ? $project : basename($project)),              ' all', $crlf;  }  ## Print out the project_name_list target  print $fh $crlf, "project_name_list:$crlf";  foreach my $project (sort @$list) {    print $fh "\t\@echo $$trans{$project}$crlf";  }}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -