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

📄 genmake.pl

📁 mpeg4编解码器
💻 PL
📖 第 1 页 / 共 2 页
字号:
    push(@asm_objs, $obj);    print OUT "ifeq (\$(@Conditional_Flag{$f}),@Conditional_Value{$f})\n";    print OUT "$name_ASM += \$(OBJ_OUTPUT_DIR)$obj.\$(O)\n";    print OUT "endif\n";    shift @asm_objs_cond;  }  print OUT "\nendif\n";  print OUT "\n\n";  if ($flag) {    print OUT "\nendif   #$flag\n";  }}#########################################sub write_header{  print OUT "################################################\n";  print OUT "#   Common makefile. Automatically generated.  #\n";  print OUT "################################################\n";  print OUT "\n";  my @labels = values %libs_label;  print OUT "all: @labels\n";  print OUT "all_so: @Shared_Bin_So ";  print OUT join("_so ", @labels); print OUT "_so\n";  print OUT "\n";  print OUT "ALL_TESTS = @Ex_Bin @Shared_Bin_So\n";  print OUT "ALL_TESTS_BENCH =";  my @exs = @Ex_Bin;  while(@exs) {    my $ex = @exs[0]; shift @exs;    print OUT " $ex.test";  }  print OUT "\n";  print OUT "ALL_TESTS_PURE =";  my @exs = @Ex_Bin;  while(@exs) {    my $ex = @exs[0]; shift @exs;    print OUT " $ex.pure";  }  print OUT "\n";  print OUT "\n";  print OUT "tests: \$(ALL_TESTS)\n";  print OUT "tests.test: \$(ALL_TESTS_BENCH)\n";  print OUT "tests.pure: \$(ALL_TESTS_PURE)\n";  print OUT "\n";}###########################################        generation of libs           ###########################################sub write_libs {  print "-= LIBS =-\n";  print OUT "#########################################\n";  print OUT "##            LIBRARIES                ##\n";  print OUT "#########################################\n";  print OUT "\n";  while(@libs) {      my $lib = @libs[0];    print "  [$lib]\n";    print OUT "#############\n";    print OUT "############# lib: $lib ################\n";    print OUT "#############\n";    print OUT "\n";    my @lib_dirs = split( ',', @Libs_src_dirs{$lib} );    my $Nb = 1;    while(@lib_dirs)    {          my $subdir = @lib_dirs[0];      my $dir = "$src_dir/$subdir";      my $dir_str = "\$($lib\_SRC_DIR$Nb)";      print "   ($subdir)\n";      print OUT "   ###### ($dir) ######\n";      print OUT "\n";      write_lib_entry($dir, $lib, $Nb);      print OUT "$lib\_SRC_DIR$Nb = \$(LIB_SRC_DIR)$subdir\$(SEP)\n";      print OUT "\n";      print OUT "     ##### cpp objs for '$lib/$subdir'\n";      print OUT "\n";      while(@cpp_objs) {        write_cpp_entry($dir_str,  @cpp_objs[0], "");  # no flag?        shift @cpp_objs;      }      while (@asm_objs) {        print OUT "     ##### asm objs for '$lib/$subdir'\n";        print OUT "\n";        while(@asm_objs) {          write_asm_entry($dir_str, @asm_objs[0], "_a");  # no flag?          shift @asm_objs;        }      }      print OUT "\n";      shift @lib_dirs;      $Nb++;    }    print OUT "  ##### main entry for '$lib' #####\n";    print OUT "\n";          ##### lib entry #####    my $label = @libs_label{$lib};    my $name = "LIB_$lib";    my $name_so = "LIB_$lib\_SO";    print OUT "$name\_ALL_OBJS = ";    while ($Nb>1) {      $Nb--;      print OUT " \$($lib\_OBJ$Nb) \$($lib\_OBJ_ASM$Nb)";    }    print OUT "\n\n";    print OUT "LIB_$lib    = \$(LIB_OUTPUT_DIR)libskl_$label.\$(A)\n";    print OUT "LIB_$lib\_SO = \$(LIB_SO_OUTPUT_DIR)libskl_$label.\$(SO)\n";    print OUT "\$($name): \$($name\_ALL_OBJS)\n";    print OUT "\t\$(AR) \$($name) \$($name\_ALL_OBJS)\n";    print OUT "\t\$(RANLIB) \$($name)\n";    print OUT "\$($name\_SO): \$($name\_ALL_OBJS)\n";    print OUT "\t\$(LDSO) \$(OUT) \$($name\_SO) \$($name\_ALL_OBJS) \\\n\t";    if (@Libs_so_link{$lib}) {      my @Links = split( ' ', @Libs_so_link{$lib});       while(@Links) {        print OUT "\$(LIBINC)$Links[0] ";        shift @Links;      }    }    print OUT "\$(LDSO_FLAGS)\n\n";    print OUT "$label:    \$($name\)\n";    print OUT "$label\_so: \$($name_so)\n";    print OUT "\n\n";    shift @libs;  }}###########################################    generation of shared objects     ###########################################sub write_shared{  print "-= SHARED =-\n";  print OUT "#########################################\n";  print OUT "##            SHARED OBJ               ##\n";  print OUT "#########################################\n";  print OUT "\n";  while(@Shared_Bin) {    my @Src;    while(@Shared_Src) {      if (@Shared_Src[0] eq ";") { shift @Shared_Src; last; }      push( @Src, @Shared_Src[0] );      shift @Shared_Src;    }    my @Flag;    while(@Shared_Flag) {      if (@Shared_Flag[0] eq ";") { shift @Shared_Flag; last; }      push( @Flag, @Shared_Flag[0] );      shift @Shared_Flag;    }    my @Link;    while(@Shared_Link) {      if (@Shared_Link[0] eq ";") { shift @Shared_Link; last; }      push( @Link, @Shared_Link[0] );      shift @Shared_Link;    }    print "  [@Shared_Bin[0]] ( ";    print OUT "## Shared obj: @Shared_Bin[0]\n\n";    my @src = @Src;    while(@src) {      if (@src[0] =~ /([\w\/]+)\.asm/) {         write_asm_so_entry( $1, "_so", @Flag );        print "$1.asm ";      }      elsif (@src[0] =~ /([\w\/]+)\.cpp/) {         write_cpp_so_entry($1, "_so", @Flag, "\$(CCSO_FLAGS)");         print "$1.cpp ";      }      else {         write_cpp_so_entry(@src[0], "_so", @Flag, "\$(CCSO_FLAGS)");        print "@src[0].cpp ";      }      shift @src;    }    print")\n";    write_so_entry(@Shared_Bin[0], @Src, ";", @Link);    shift @Shared_Bin;  }}###########################################       generation of examples        ###########################################sub write_ex_entry{    my $exe = @_[0]; shift @_;  my @objs;  while(@_) {    if (@_[0] eq ";") { shift @_; last; }    push @objs, " \$(OBJ_OUTPUT_DIR)@_[0].\$(O)";    shift @_;  }  my @libs;  my @deps;  while(@_) {    push @libs, "\$(LIBINC)skl\_@_[0] ";    push @deps, "\\\n\t  \$(LIB_OUTPUT_DIR)libskl\_@_[0].\$(A) ";    shift @_;  }  print OUT "$exe: @objs @deps\n";  print OUT "\t\$(LD) \$(OUT) \$(BUILD_DIR)$exe \\\n";  print OUT "\t @objs\\\n";  print OUT "\t \$(LIBDEF)\$(LIB_OUTPUT_DIR) @libs \$(LD_FLAGS)\n";  print OUT "\n\n";  print OUT "$exe.pure: @objs @deps\n";  print OUT "\t\$(PURIFY) \$(LD) \$(OUT) \$(BUILD_DIR)$exe.pure \\\n";  print OUT "\t @objs\\\n";  print OUT "\t \$(LIBDEF)\$(LIB_OUTPUT_DIR) @libs \$(LD_FLAGS)\n";  print OUT "\n\n";  print OUT "$exe.test: $exe\n";  print OUT "\t.\$(SEP)$exe > test\$(SEP)$exe.test\n";  print OUT "\t\$(DIFF) test\$(SEP)$exe.test \\\n";  print OUT "\t  ..\$(SEP)..\$(SEP)data\$(SEP)$exe.test > test\$(SEP)$exe.diff\n";  print OUT "\trm .\$(SEP)$exe\n";  print OUT "\n\n";}sub write_examples{  print "-= EXAMPLES =-\n";  print OUT "#########################################\n";  print OUT "##            EXAMPLES                 ##\n";  print OUT "#########################################\n";  print OUT "\n";  while(@Ex_Bin) {    my @Src;    while(@Ex_Src) {      if (@Ex_Src[0] eq ";") { shift @Ex_Src; last; }      push( @Src, @Ex_Src[0] );      shift @Ex_Src;    }    if (not @Src) { push(@Src, @Ex_Bin[0]); }    my @Dep;    while(@Ex_Dep) {      if (@Ex_Dep[0] eq ";") { shift @Ex_Dep; last; }      push( @Dep, @Ex_Dep[0] );      shift @Ex_Dep;    }    my @Flag;    while(@Ex_Flag) {      if (@Ex_Flag[0] eq ";") { shift @Ex_Flag; last; }      push( @Flag, @Ex_Flag[0] );      shift @Ex_Flag;    }    if (@Ex_Type[0]=="0") { $src_dir = "TEST_SRC_DIR"; }    elsif (@Ex_Type[0]=="1") { $src_dir = "EXAMPLE_SRC_DIR"; }    shift @Ex_Type;    print "  [@Ex_Bin[0]] ( ";    print OUT "## Example: @Ex_Bin[0]\n\n";    my @src = @Src;    while(@src) {       if (@src[0] =~ /(\w+)\.asm/) {         write_asm_entry("\$($src_dir)", $1, "_a", @Flag);        print "$1.asm ";      }      elsif (@src[0] =~ /(\w+)\.cpp/) {         write_cpp_entry("\$($src_dir)", $1, "", @Flag);         print "$1.cpp ";      }      else {         write_cpp_entry("\$($src_dir)", @src[0], "", @Flag);        print "@src[0].cpp ";      }      shift @src;    }    print")\n";    write_ex_entry(@Ex_Bin[0],@Src,";", @Dep);    shift @Ex_Bin;  }}#########################################sub write_makefile{  print "Generating $makefile\n";  open(OUT,">$makefile") || die( "can't open $makefile\n" );  write_header;  write_libs;  write_shared;  write_examples;  close OUT;}###########################################      Doc entries (files.txt)        ###########################################sub write_doc{  print "-= DOC ($doctxt) =-\n";  open(DOC,">$doctxt") || die( "can't open $doctxt\n" );    push(@include_dir, $inc_dir);    while(@include_dir) {      my $file;      my $dir = @include_dir[0];      print "  [$dir]\n";      shift @include_dir;      opendir (DIR, $dir) || die ("Cannot opendir $dir\n");      while ($file=readdir(DIR)) {        if ($file =~ /(\w+).h$/) { push(@h_objs,"$dir/$1.h"); }      }      closedir DIR;    }    while(@h_objs) {      print DOC "//\@Include: @h_objs[0]\n";      shift @h_objs;    }  close DOC;}###########################################               main                  ###########################################read_config_file;write_makefile;write_doc;#########################################

⌨️ 快捷键说明

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