gerador automatico de Makefiles

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

[ Hits: 8.247 ]

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

Listando processos via /proc/PID

Usando shared memory 2

Estrutura de dados: Lista dinâmica duplamente encadeada

Jogo Windows Invaders (com gráficos)

Jogo da Velha com IA invencivel


  

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