gerador automatico de Makefiles

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

[ Hits: 8.436 ]

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

Vetor de lista

Ordenar um lista estática sequencial básica (bubblesort)

Função "Temporizador" em C

Analisador Léxico 0.5

Minishell


  

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