Makefile
Makefile
1 Cos'è? E' uno script che serve per compilare un programma?
2. Ho un programma di nome prova2.c ho bisogno del makefile, mi aiutate a capire come si crea un makefile?
Ecco il materiale a disposizione:
prova2.c si trova in home/ciro/Desktop/blas/
makefile lo devo creare in questa stessa directory?
Partendo dal seguente Makefile e volendolo modificare
#
# The Makefile
#
# dlvd = path della dir CBLAS
dlvl = home/ciro/Desktop/blas/CBLAS/
include $(dlvl)/Makefile.in
# path degli header file
INC = -I$(CBDIR)/src
# Archivi necessari per compilare
LIB = $(CBLIB) $(BLLIB) –lf2c
prova2: prova.o
$(CC) -o esex prova.o $(LIB)
clean:
rm -f core *.o a.out
cleanobj:
rm -f core *.o a.out
.f.o:
$(FC) $(FFLAGS) -c $*.f
.c.o:
$(CC) $(INC) $(CFLAGS) -c $*.c
in questo make file c'e' un richiamo a makefile.in presente nella directory home/ciro/Desktop/blas/CBLAS/
makefile.in:
SHELL = /bin/sh
#-----------------------------------------------------------------------------
# Platform
#-----------------------------------------------------------------------------
PLAT = LINUX
#-----------------------------------------------------------------------------
# Libraries and includs
#-----------------------------------------------------------------------------
BLLIB = $(HOME)/Desktop/blas/CBLAS/lib/libblas.a
CBDIR = $(HOME)/Desktop/blas/CBLAS
CBLIBDIR = $(CBDIR)/lib/$(PLAT)
CBLIB = $(CBLIBDIR)/cblas_$(PLAT).a
#-----------------------------------------------------------------------------
# Compilers
#-----------------------------------------------------------------------------
CC = gcc
FC = g77
LOADER = $(FC)
#-----------------------------------------------------------------------------
# Flags for Compilers
#-----------------------------------------------------------------------------
CFLAGS = -O3 -DADD_
FFLAGS = -O3
#-----------------------------------------------------------------------------
# Archive programs and flags
#-----------------------------------------------------------------------------
ARCH = ar
ARCHFLAGS = r
RANLIB = echo
Chi mi spiega come si crea il Makefile e quali sono i parametri da modificare e perchè? (b2b)
2. Ho un programma di nome prova2.c ho bisogno del makefile, mi aiutate a capire come si crea un makefile?
Ecco il materiale a disposizione:
prova2.c si trova in home/ciro/Desktop/blas/
makefile lo devo creare in questa stessa directory?
Partendo dal seguente Makefile e volendolo modificare
#
# The Makefile
#
# dlvd = path della dir CBLAS
dlvl = home/ciro/Desktop/blas/CBLAS/
include $(dlvl)/Makefile.in
# path degli header file
INC = -I$(CBDIR)/src
# Archivi necessari per compilare
LIB = $(CBLIB) $(BLLIB) –lf2c
prova2: prova.o
$(CC) -o esex prova.o $(LIB)
clean:
rm -f core *.o a.out
cleanobj:
rm -f core *.o a.out
.f.o:
$(FC) $(FFLAGS) -c $*.f
.c.o:
$(CC) $(INC) $(CFLAGS) -c $*.c
in questo make file c'e' un richiamo a makefile.in presente nella directory home/ciro/Desktop/blas/CBLAS/
makefile.in:
SHELL = /bin/sh
#-----------------------------------------------------------------------------
# Platform
#-----------------------------------------------------------------------------
PLAT = LINUX
#-----------------------------------------------------------------------------
# Libraries and includs
#-----------------------------------------------------------------------------
BLLIB = $(HOME)/Desktop/blas/CBLAS/lib/libblas.a
CBDIR = $(HOME)/Desktop/blas/CBLAS
CBLIBDIR = $(CBDIR)/lib/$(PLAT)
CBLIB = $(CBLIBDIR)/cblas_$(PLAT).a
#-----------------------------------------------------------------------------
# Compilers
#-----------------------------------------------------------------------------
CC = gcc
FC = g77
LOADER = $(FC)
#-----------------------------------------------------------------------------
# Flags for Compilers
#-----------------------------------------------------------------------------
CFLAGS = -O3 -DADD_
FFLAGS = -O3
#-----------------------------------------------------------------------------
# Archive programs and flags
#-----------------------------------------------------------------------------
ARCH = ar
ARCHFLAGS = r
RANLIB = echo
Chi mi spiega come si crea il Makefile e quali sono i parametri da modificare e perchè? (b2b)
Re: Makefile
non è che tanto semplice spiegare cos'è un Makefile, eccetto quando si tratta di due istruzioni. 
Comunque un breve tutorial lo trovi qua: http://mrbook.org/tutorials/make/.
Nel caso indicato da te, penso che non è stato creato solo un Makefile da utilizzare con 'make', ma dietro ci sono anche gli autotools (vd. http://sourceware.org/autobook/)
Comunque un breve tutorial lo trovi qua: http://mrbook.org/tutorials/make/.
Nel caso indicato da te, penso che non è stato creato solo un Makefile da utilizzare con 'make', ma dietro ci sono anche gli autotools (vd. http://sourceware.org/autobook/)
Summum jus, summa injuria.
Re: Makefile
ora do un'occhiata ai tutorials pero' forse ho fatto un passo avanti perchè compilando mi da 1 solo errore forse è una sciocchezza.
allora il mio makefile è quello scritto sopra e utilizza anche makefile.in.
quando do il make mi da questo output:
ciro@ciro:~/Desktop/blas$ make
makefile:16: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
a cosa potrebbe esser dovuto l'errore?
allora il mio makefile è quello scritto sopra e utilizza anche makefile.in.
quando do il make mi da questo output:
ciro@ciro:~/Desktop/blas$ make
makefile:16: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
a cosa potrebbe esser dovuto l'errore?
Re: Makefile
Nel primo link che ho indicato c'è scritto:
Quindi quell'errore sarà dovuto al fatto che alla riga 16 c'è una linea senza il carattere tabulatore (che è obbligatario e formato da otto spazi).The basic makefile is composed of:
target: dependencies
[tab] system command
Summum jus, summa injuria.
Re: Makefile
si infatti era proprio quello il problema c'era un doppio tab.
ora dando make mi dice:
ciro@ciro:~/Desktop/blas$ make
gcc -o esex prova.o /home/ciro/Desktop/blas/CBLAS/lib/LINUX/cblas_LINUX.a /home/ciro/Desktop/blas/CBLAS/lib/libblas.a –lf2c
gcc: –lf2c: Nessun file o directory
make: *** [prova2.c] Error 1
cos'e' che non trova? prova.o? prova2.c? o le librerie?
ora dando make mi dice:
ciro@ciro:~/Desktop/blas$ make
gcc -o esex prova.o /home/ciro/Desktop/blas/CBLAS/lib/LINUX/cblas_LINUX.a /home/ciro/Desktop/blas/CBLAS/lib/libblas.a –lf2c
gcc: –lf2c: Nessun file o directory
make: *** [prova2.c] Error 1
cos'e' che non trova? prova.o? prova2.c? o le librerie?
Re: Makefile
quando trovi un parametro passato a gcc come '-l' si tratta di una libreria. Nel tuo caso il nome completo dovrebbe essere 'libf2c.a' (cioè statica, oppure condivisa e terminerebbe con l'estensione «.so» [1]).
GCC cerca le librerie implicitamente nel path «/usr/lib», o «/lib». Se la libreria si trovo in altro posto, dovrebbe essere passata con il flag 'L' (es. -L/opt/bad/lib -ltest -- ipotizzando un file di libreria chiamato 'libtest.a')
[1] premesso che sul tema delle librerie ci potremmo scrivere un libro
, per quanto riguarda l'inclusione di librerie condivise, non sono capace in poche righe di spiegarti chiaramente come utilizzarle: dovrei parlarti dell'utility 'ld.so', dei file «/etc/ld.so.cache», «/etc/ld.so.conf», del programmino 'ldconfig', della variabile d'ambiente LD_LIBRARY_PATH, dell'opzione '-Wl' (se non erro) del compilatore... ergo, meglio un buon manuale sulla cosa.
GCC cerca le librerie implicitamente nel path «/usr/lib», o «/lib». Se la libreria si trovo in altro posto, dovrebbe essere passata con il flag 'L' (es. -L/opt/bad/lib -ltest -- ipotizzando un file di libreria chiamato 'libtest.a')
[1] premesso che sul tema delle librerie ci potremmo scrivere un libro
Summum jus, summa injuria.
Re: Makefile
ho capito piu' o meno quello che hai tentato di spiegarmi e quanto prima mi procurero' dei manuali. Diciamo che sono un novellino in quanto non avevo mai visto un sistema unix prima di installare ubuntu pochi giorni fa.
se ho capito bene il problema è: -lf2c infatti se lo ometto il programma mi crea correttamente l'eseguibile.
Dunque la mia domanda è perchè c'e' bisogno di questa ulteriore libreria? -lf2c rappresenta una libreria standard? e se si come posso fare per procurarmela?
p.s. io sto seguedo gli appunti del professore, scritti malissimo tra l'altro ora io ho capito che
gcc -o esex prova.o /home/ciro/Desktop/blas/CBLAS/lib/LINUX/cblas_LINUX.a /home/ciro/Desktop/blas/CBLAS/lib/libblas.a –lf2c
mi crea l'eseguibile esex di prova.o + 3 librerie, le prime 2 con tanto di percorso specifico piu' la terza giusto?
un'altra domanda quando ho esex per eseguirlo da terminale devo dare o esistono altri comandi per eseguirlo?
se ho capito bene il problema è: -lf2c infatti se lo ometto il programma mi crea correttamente l'eseguibile.
Dunque la mia domanda è perchè c'e' bisogno di questa ulteriore libreria? -lf2c rappresenta una libreria standard? e se si come posso fare per procurarmela?
p.s. io sto seguedo gli appunti del professore, scritti malissimo tra l'altro ora io ho capito che
gcc -o esex prova.o /home/ciro/Desktop/blas/CBLAS/lib/LINUX/cblas_LINUX.a /home/ciro/Desktop/blas/CBLAS/lib/libblas.a –lf2c
mi crea l'eseguibile esex di prova.o + 3 librerie, le prime 2 con tanto di percorso specifico piu' la terza giusto?
un'altra domanda quando ho esex per eseguirlo da terminale devo dare
Codice: Seleziona tutto
./esexRe: Makefile
sì, il compilatore non la trova e non riesce a creare l'eseguibile.ciro_! ha scritto: se ho capito bene il problema è: -lf2c infatti se lo ometto il programma mi crea correttamente l'eseguibile.
non ne ho la più pallida idea.Dunque la mia domanda è perchè c'e' bisogno di questa ulteriore libreria?
dubito che è una funzione standard.-lf2c rappresenta una libreria standard? e se si come posso fare per procurarmela?
faglielo presente.p.s. io sto seguedo gli appunti del professore, scritti malissimo tra l'altro
no, ti crea l'eseguibile come da parametro '-o', ma le librerie non le crea, già sono state create.gcc -o esex prova.o /home/ciro/Desktop/blas/CBLAS/lib/LINUX/cblas_LINUX.a /home/ciro/Desktop/blas/CBLAS/lib/libblas.a –lf2c
mi crea l'eseguibile esex di prova.o + 3 librerie, le prime 2 con tanto di percorso specifico piu' la terza giusto?
qualunque file eseguibile non presente nel $PATH deve essere avviato con quella sintassi. Puoi vedere cosa contiene l'ambiente PATH con 'echo $PATH': ci sono vari modi per modificarlo, e per modificarlo in automatico tramite la shell, ma siccome sei nuovo di linux non vorrei appesantire il discorso.un'altra domanda quando ho esex per eseguirlo da terminale devo dareo esistono altri comandi per eseguirlo?Codice: Seleziona tutto
./esex
Summum jus, summa injuria.
Re: Makefile
Chiarissimo e ovvio tra l'altronon ne ho la più pallida idea.Dunque la mia domanda è perchè c'e' bisogno di questa ulteriore libreria?Evidentemente il programma usa funzioni contenute all'interno di esse. Concetto identico nell'usare la funzione 'printf' contenuta in 'stdio.h'. Cioè, non c'è nulla di sbagliato ad includerla se si usano le funzioni in essa contenute.
pero' io ho il dubbio che sia qualcosa di standard perchè il prof nel makefile le prime 2 librerie (le BLAS) me le fa richiamare col percorso perchè le ho installate ora in una cartella creata da me mentre la libreria -lf2c la richiama in modo diverso. boh o forse a me non è ancora chiaro il concetto, oppure è il professore che sul suo pc la trova cosi e quindi la richiama cosi.dubito che è una funzione standard.-lf2c rappresenta una libreria standard? e se si come posso fare per procurarmela?
Stamane sono andato a ricevimento, premetto che lui è un matematico e tiene un corso di laboratorio di calcolo alla facoltà di informatica. ora il 99% dei suoi studenti non ha mai visto linux, perchè non abbiamo nessun corso seguito in precedenza dove si faccia linux. Quindi siamo completamente niubbi in materia. lui mette in rete gli appunti su come si installano le librerie blas... Ora dico io, installando su una piattaforma nuova è normale che uno studente possa incontrare problemi... sono andato a chiedere come si faceva il makefile e mi ha risposto sei tu l'informatico io posso spiegarti la matematica ma non come si installa una libreria su linux...faglielo presente.p.s. io sto seguedo gli appunti del professore, scritti malissimo tra l'altro
e quindi? io il progetto non lo faccio? o devo andare da un altro professore con il quale non seguo corsi e farmi spiegare una cosa...che lui si che non è tenuto a spiegarti.
me ne sono tornato a mani vuote che rabbia.
Dunque ti ringrazio davvero di cuore per queste informazioni che mi hai dato
Un ultima domanda, siccome devo scrivere programmi in c, che utilizzino queste librerie aggiuntive a quelle standard che programmi posso usare?
la mia attuale procedura, un po' rozza credo è:
- scrivere il programma in c in un file di testo
- aprire il terminale e fare la compilazione
esiste un programma che si installi su ubuntu con interfaccia? un compilatore c o qualcosa di simile? io ho installato build essential ma credo serva solo per aggiungere il g++ e simili da usare via terminale o mi sbaglio?
Re: Makefile
Non complicarti la vita: chiedi a lui. I professori sono pagati per insegnare non per confondere, o per far applicare erroneamente il rimedio sbagliato (cit. prof. di fisica).ciro_! ha scritto: pero' io ho il dubbio che sia qualcosa di standard perchè il prof nel makefile le prime 2 librerie (le BLAS) me le fa richiamare col percorso perchè le ho installate ora in una cartella creata da me mentre la libreria -lf2c la richiama in modo diverso. boh o forse a me non è ancora chiaro il concetto, oppure è il professore che sul suo pc la trova cosi e quindi la richiama cosi.
che, IMHO, è la soluzione ottimale.Un ultima domanda, siccome devo scrivere programmi in c, che utilizzino queste librerie aggiuntive a quelle standard che programmi posso usare?
la mia attuale procedura, un po' rozza credo è:
- scrivere il programma in c in un file di testo
- aprire il terminale e fare la compilazione
penso che non ti serve un IDE (te questo cerchi a quanto ho capito): scriverai codice in C, farai link a librerie che puoi tranquillamente fare da linea di comando, magari con un semplice Makefile (per evitare di scrivere un comando 'gcc ...' da 200 caratteriesiste un programma che si installi su ubuntu con interfaccia? un compilatore c o qualcosa di simile? io ho installato build essential ma credo serva solo per aggiungere il g++ e simili da usare via terminale o mi sbaglio?
Se proprio vuoi un ambiente IDE prova Eclipse o qualcosa del genere (vedi post passati, ne hanno indicato diversi).
Summum jus, summa injuria.
Chi c’è in linea
Visualizzano questa sezione: Google [Bot] e 3 ospiti
