gerador automatico de Makefiles

Publicado por Pedro Robson Leão 11/06/2007

[ Hits: 6.677 ]

Download genmake.sh




Código baseado no genmake original de ma_muquit@fccc.edu;
gera um arquivo makefile automaticamente.

  



Esconder código-fonte

#!/usr/bin/bash

VERSION="1.0"
EMAIL="ma_muquit@fccc.edu"
VER="Makefile automatically generated by genmake $VERSION, `date '+%h-%d-%y'`"
DATE=`date +%b-%d-%Y`
AUTHOR="genmake $VERSION by $EMAIL"

function genGenericMake() {
   local fname=${3:-"Makefile"};
   local opc=${1};

   local prog=${2};
   local cc=gcc;

   local dir=;
   local sharedlibrary=;

   case ${opc} in
      "lib")      dir="lib";
               prog="lib${prog}.a";;
      "shared")   dir="lib";
               STRIP="";
               prog="lib${prog}.so";
               sharedlibrary="-shared";;
      *)         STRIP="";
               dir="bin";;
   esac

   [ ! -z "${sharedlibrary}" ] && {
      local machine=$(uname);
      [ "${machine}" == "SunOS" ] && local sharedlibrary="-G";
   }

   cat >> ${fname} <<EOF
##
# ${VER}
# ${AUTHOR}
#
# \$Id: \$
#
##
CC= ${cc}
AR= ar cq
RANLIB= ranlib

baseinstall=./
DEFS=
PROGDIR=../${dir}
PROGNAME= \$(PROGDIR)/${prog}
INCLUDES=  -I.
LIBS=

# replace -O with -g in order to debug

DEFINES= \$(DEFS) -DSYS_UNIX=1
CFLAGS= -O -Wall
ifeq (\$(DEBUG),on)
   CFLAGS=-g -D__DEBUG__ -O -Wall
endif

OBJS = ${OBJS}

.c.o:
   @rm -f \$@
   \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$*.c

all: \$(PROGNAME) install-strip

\$(PROGNAME) : \$(OBJS)
   @rm -f \$@
   @mkdir -p \$(PROGDIR)
EOF


   [ "${opc}" != "lib" ] && {
      cat >> ${fname} <<EOF
   \$(CC) \$(CFLAGS) ${sharedlibrary} -o \$(PROGNAME) \$(OBJS) \$(LIBS)
EOF
   }

   [ "${opc}" == "lib" ] && {
      cat >> ${fname} <<EOF
   \$(AR) \$@ \$(OBJS)
   \$(RANLIB) \$@
EOF
   }

   cat >> ${fname} <<EOF

clean:
   rm -f \$(OBJS) \$(PROGNAME) core *~ *.ln

install-strip: strip install

strip:
   #Strip file
   ${STRIP}strip \$(PROGNAME)

install:
   #Verify dir file
   mkdir -p \$(baseinstall)

   #Copy files
   cp \$(PROGNAME) \$(baseinstall)
EOF
}

[ ${#} -lt 2 ] && {
   echo "Use: ${0} [opc <prog|lib|shared>] [prog name] <makefile name>";
   exit 0;
}

STRIP="#";

opc=${1};
prog=${2};
make=${3:-"Makefile"};

OBJS="$( \ls -c1 *.c | tr '\n' ' ')";
OBJS="${OBJS//\.c/.o}";

[ -f ${make} ] && {
   echo "O arquivo ${make} ja existe";
   exit 0;
}
genGenericMake ${opc} ${prog} ${make};
exit 1;

Scripts recomendados

A tabuada em C!

Arvores Red Black

Driver tgz

hanoi

Busca, inserção e remoção de elementos numa lista


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts