📄 mkmf
字号:
my $exec = $src; $exec =~ s/$source_ext_re/$exec_extension/i; my $obj = $src; $obj =~ s/$source_ext_re/$object_extension/i; my $mkexec; chomp($mkexec = `$^X $clo{'cxxflags'} --mkexec $exec`); print MF "$exec: $obj\n"; print MF "\t\$(LD) $mkexec $obj \$(LDFLAGS) \$(POST_LDFLAGS)\n"; print MF "\n"; }} elsif ($clo{'static-lib'} or $clo{'shared-lib'}) { my $static_target = $static_lib_prefix . $clo{'static-lib'} . $static_lib_extension; my $shared_target = $shared_lib_prefix . $clo{'shared-lib'} . $shared_lib_extension; my $targets = ''; my $static_lib = `$^X $clo{'cxxflags'} --mkstatic $static_target`; chomp($static_lib); clean($static_lib); my $shared_lib = `$^X $clo{'cxxflags'} --major $clo{'major'} --mkshared $shared_target`; chomp($shared_lib); clean($shared_lib); $targets .= "$static_target " if $clo{'static-lib'}; $targets .= "$shared_target " if $clo{'shared-lib'}; print MF "TARGETS=$targets\n\n"; print MF "all: \$(TARGETS)\n\n"; if ($clo{'static-lib'}) { print MF "$static_target: \$(OBJECTS)\n"; print MF "\t\$(AR) \$(ARFLAGS) $static_lib \$(OBJECTS)\n"; print MF "\t$arextra $static_lib\n" if length($arextra); print MF "\n"; } if ($clo{'shared-lib'}) { print MF "$shared_target: \$(OBJECTS)\n"; print MF "\t\$(SAR) \$(SARFLAGS) $shared_lib \$(OBJECTS) \$(POST_LDFLAGS)\n"; print MF "\n"; }} elsif ($clo{'wrapper'}) { $clo{'with-test'} ||= join(',', @ARGV); print MF "\n"; print MF "all:\n"; foreach my $dir (@ARGV) { print MF "\t\@(cd $dir; \${MAKE})\n"; } print MF "\n"; print MF "clean: ", join(' ', @{$clo{'clean-target'}}), "\n"; print MF "\t- $rmf ", join(' ', @{$clo{'clean-file'}}), "\n" if @{$clo{'clean-file'}}; foreach my $dir (@ARGV) { print MF "\t\@(cd $dir; \${MAKE} clean)\n"; } print MF "\n"; print MF "realclean:\n"; foreach my $dir (@ARGV) { print MF "\t\@(cd $dir; \${MAKE} realclean)\n"; } print MF "\trm -f $clo{'output'}\n"; print MF "\n"; if ($clo{'with-test'}) { print MF "test:\n"; foreach my $dir (split(/\s*,\s*/, $clo{'with-test'})) { print MF "\t\@(cd $dir; \${MAKE} test)\n"; } print MF "\n"; }}if ($clo{'test-cmds'}) { print MF "test: \${TARGETS}\n"; print MF "\t$_\n" foreach (split(/\s*,\s*/, $clo{'test-cmds'})); print MF "\n";} if ($depend_flag && $clo{'developer'} && !$clo{'wrapper'}) { my @to_unlink; foreach my $fake_header (@{$clo{'fake-header'}}) { if (-e $fake_header) { print STDERR "$0: $fake_header already exists\n"; next; } unless (open(FH, ">$fake_header")) { print STDERR "$0: could not create $fake_header: $!\n"; next; } print FH "/* fake header */\n"; close FH; push(@to_unlink, $fake_header); } foreach (@ARGV) { print " ===> Generating Dependancy Information for $_\n" unless $clo{'quiet'}; print MF `$ENV{'CXX'} $ENV{'CXXFLAGS'} $depend_flag $_`; print MF "\n"; } unlink(@to_unlink);}if (!$clo{'wrapper'}) { print MF "clean: ", join(' ', @{$clo{'clean-target'}}), "\n"; print MF "\t- $rmf \$(OBJECTS) \$(TARGETS) *.core core ", join(' ', @{$clo{'clean-file'}}), "\n"; print MF "\t- rm -rf SunWS_cache ir.out\n" if $^O eq 'solaris'; print MF "\n"; print MF "realclean: clean\n"; print MF "\t- $rmf $clo{'output'}\n"; print MF "\n"; print MF ".SUFFIXES: .cxx\n"; print MF ".SUFFIXES: .obj\n"; print MF "\n"; print MF ".cxx.o:\n"; if ($^O eq 'solaris' and $clo{'many-exec'}) { print MF "\t\@if test -d SunWS_cache ; then rm -rf SunWS_cache; fi\n"; } print MF "\t\$(CXX) \$(CXXFLAGS) -c \$<\n"; print MF "\n"; print MF ".cxx.obj:\n"; if ($^O eq 'solaris' and $clo{'many-exec'}) { print MF "\t\@if test -d SunWS_cache ; then rm -rf SunWS_cache; fi\n"; } print MF "\t\$(CXX) \$(CXXFLAGS) -c \$<\n"; print MF "\n";}if ($clo{'install'} and $^O !~ /mswin/) { unless (open(SPEC, $clo{'install'})) { print STDERR "$0: can't open install spec file $clo{'install'}: $!\n"; exit 1; } my %vars = ( 'BINDIR' => '/usr/local/bin', 'INCLUDEDIR' => '/usr/local/include', 'LIBDIR' => '/usr/local/lib', 'MANDIR' => '/usr/local/share/man', ); my @binaries; my @pkgconfig; my @include_files; my @include_dirs; my @static_libraries; my @shared_libraries; my @man_pages; while (<SPEC>) { chomp; s/^\s+//g; s/\s+$//g; next if /^$/ or /^#/; if (/^\w+\s*=/) { my ($key, $value) = split(/\s*=\s*/, $_, 2); $key = uc $key; if (!exists $vars{$key}) { print STDERR "$0: warning, $key is not a valid variable.\n"; print STDERR "$0: from $clo{'install'}:$.\n"; next; } $vars{$key} = $value; } elsif (/^include-dir\s+(\S+)\s+(\S+)$/) { if (! -d $1) { print STDERR "$0: warning, $1 is not a directory.\n"; print STDERR "$0: from $clo{'install'}:$.\n"; next; } push(@include_dirs, [$1, $2]); } elsif (/^include-files?\s+(\S+)$/) { my @files = glob($1); if (!@files) { print STDERR "$0: glob did not match any files\n"; print STDERR "$0: from $clo{'install'}:$.\n"; next; } my @names = map{s(^.*/)()} @files; for (my $i=0; $i<@files; ++$i) { push(@include_files, [$files[$i], $names[$i]]); } } elsif (/^binary\s+(\S+)$/) { my ($full, $base) = ($1, $1); $base =~ s(^.*/)(); push(@binaries, [$full, $base]); } elsif (/^pkgconfig\s+(\S+)$/) { push(@pkgconfig, $1); } elsif (/^(static-lib|shared-lib)\s+(\S+)\s+(\S+)\s*(\d+)?$/) { if (! -d $2) { print STDERR "$0: first option to $1 should be a directory.\n"; print STDERR "$0: $2 is not a directory.\n"; print STDERR "$0: from $clo{'install'}:$.\n"; next; } if ($1 eq 'static-lib') { push(@static_libraries, [$2, $3]); } elsif ($1 eq 'shared-lib') { my $major = $4 || 1; push(@shared_libraries, [$2, $3, $major]); } } elsif (/^man\s+(\d+)\s+(.+)$/) { if (! -e $2) { print STDERR "$0: man page not found: $2\n"; next; } push(@man_pages, [$1, $2]); } else { print STDERR "$0: I don't understand this line.\n"; print STDERR "$0: $_\n"; print STDERR "$0: from $clo{'install'}:$.\n"; next; } } if (@static_libraries or @shared_libraries or @binaries or @include_dirs or @include_files or @man_pages) { print MF "install: all\n"; print MF "\tmkdir -p $vars{'BINDIR'}\n" if @binaries; print MF "\tmkdir -p $vars{'INCLUDEDIR'}\n" if @include_files or @include_dirs; print MF "\tmkdir -p $vars{'LIBDIR'}\n" if @static_libraries or @shared_libraries; print MF "\tmkdir -p $vars{'LIBDIR'}/pkgconfig\n" if @pkgconfig; print MF "\tmkdir -p $vars{'MANDIR'}\n" if @man_pages; foreach my $binary (@binaries) { print MF "\tcp $binary->[0] $vars{'BINDIR'}/$binary->[1]\n"; print MF "\tchmod 755 $vars{'BINDIR'}/$binary->[1]\n"; } foreach my $pc (@pkgconfig) { print MF "\tcp $pc $vars{'LIBDIR'}/pkgconfig/$pc\n"; print MF "\tchmod 644 $vars{'LIBDIR'}/pkgconfig/$pc\n"; } foreach my $directory (@include_dirs) { print MF "\tmkdir -p $vars{'INCLUDEDIR'}/$directory->[1]\n"; print MF "\tcp -r $directory->[0]/* $vars{'INCLUDEDIR'}/$directory->[1]\n"; print MF "\tfind $vars{'INCLUDEDIR'}/$directory->[1] -type d | xargs chmod 755\n"; print MF "\tfind $vars{'INCLUDEDIR'}/$directory->[1] -type f | xargs chmod 644\n"; } foreach my $file (@include_files) { print MF "\tcp $file->[0] $vars{'INCLUDEDIR'}/$file->[1]\n"; print MF "\tchmod 644 $vars{'INCLUDEDIR'}/$file->[1]\n"; } foreach my $library (@static_libraries) { my $libname = "$static_lib_prefix$library->[1]$static_lib_extension"; print MF "\tcp $library->[0]/$libname $vars{'LIBDIR'}/$libname\n"; print MF "\tchmod 755 $vars{'LIBDIR'}/$libname\n"; } foreach my $library (@shared_libraries) { my $libname = "$shared_lib_prefix$library->[1]$shared_lib_extension"; my $major_name = `$^X $clo{'cxxflags'} --major $library->[2] --mkshared-name $library->[1]`; chomp($major_name); clean($major_name); print MF "\tcp $library->[0]/$libname $vars{'LIBDIR'}/$major_name\n"; print MF "\tchmod 755 $vars{'LIBDIR'}/$major_name\n"; print MF "\trm -f $vars{'LIBDIR'}/$libname\n"; print MF "\t(cd $vars{'LIBDIR'}; ln -s $major_name $libname)\n"; } foreach my $manpage (@man_pages) { my $file = basename($manpage->[1]); print MF "\tmkdir -p $vars{'MANDIR'}/man$manpage->[0]\n"; print MF "\tcp $manpage->[1] $vars{'MANDIR'}/man$manpage->[0]\n"; print MF "\tchmod 644 $vars{'MANDIR'}/man$manpage->[0]/$file\n"; } print MF "\n"; }}foreach my $append (@{$clo{'append'}}) { unless (open(AP, $append)) { print STDERR "$0: can't open '$append' so that I could append it to the Makefile\n"; exit 1; } print MF "\n"; while (<AP>) { print MF; } close AP;}close MF;sub addflags { clean($_[0]); clean($_[1]); chomp($_[0] .= ' ' . $_[1]); clean($_[0]);}sub clean { $_[0] =~ s/^\s+//; $_[0] =~ s/\s+$//;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -