enssso
(usa KUbuntu)
Enviado em 02/04/2010 - 00:12h
Cara, fiz isso mais ou menos assim:
# Gerando o objeto1.o
objeto1.o: objeto1.cc
$(CC) $(CFLAGS) -c $<
# O inicio da linha acima obrigatoriamente tem que ter um caracter TAB, porque isso informa ao make que a
# linha se trata de um comando que deve ser formado e executado
#
# O '$<' será substituido, se não me engano pelo .cc, na linha acima
#
# Se o seu .h não estiver em diretorio diferente ponha no CFLAGS -I/path/para/pontoh
# Gerando o objeto2.o
objeto2.o: objeto2.cc
$(CC) $(CFLAGS) -c $<
# aqui a mesma coisa
# Gerando o objeto3.o
objeto3.o: objeto2.o objeto3.cc
$(CC) $(CFLAGS) -c $<
# aqui a mesma coisa
#
# A instrução objeto2.o faz o make gerar esse .o antes do 3
# Gerando o objeto4.o
objeto4.o: objeto4.cc
$(CC) $(CFLAGS) -c $<
# aqui a mesma coisa
# Gerando o objeto5.o
objeto5.o: objeto1.o objeto2.o objeto4.o objeto5.cc
$(CC) $(CFLAGS) -c $<
# aqui a mesma coisa
# Gerando o programa
programa: objeto1.o objeto2.o objeto3.o objeto4.o objeto5.o
$(CC) $(CFLAGS) -o $@ $(filter %.o, $^) /path/para/conjuntoobjetos1.a -lsharedso
# No inicio da linha a mesma coisa TAB
# Aliás: o erro "makefile:33: *** missing separator. Stop." pode ser por causa da falta desse TAB
#
# O '$@' sera substituido pelo "programa"
#
# O '$(filter' e' uma funcao do make para filtrar texto separado por espaços
#
# O '%.o' e' o filtro, primeiro parâmetro
#
# O segundo parâmetroo e' o quê a será filtrado, o $^ é tudo que esta depois do :
#
# Depois vem a referencia ao .a
#
# Por último a referencia ao .so (shared object) no caso a path dele esta no ldconfig e o nome do so é libsharedso.so
Uma boa pedida é ler o gnumake manual em:
http://www.gnu.org/software/make/manual/
Também dê uma lida em como usar os arquivos .in, automake, etc...
http://www.gnu.org/software/automake/
Ou peça ajuda da 'força' : ) e leia o arquivo configure dos códigos fonte de projetos como o wine, libxml2, etc...
Espero ter lhe ajudado.