gerador automatico de Makefiles

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

[ Hits: 8.274 ]

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

Funções com número variável de argumentos

signal.h - Um exemplo

Algoritmo de ordenação Quick Sort

Exemplo de sistema especialista usando Inteligência Artificial

Jogo Windows Invaders (com gráficos)


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts