PDA

View Full Version : [C] Makefile per Visual Studio


salvodel
08-07-2008, 13:54
Salve a tutti :( volevo chiedervi una cosa banale. Ho realizzato un Makefile per Linux ma non riesco a scrivere l'equivalente per lanciarlo sotto Windows con Visual Studio.
Questo è quello che la mia ignoranza ha partorito :ops2:
MAKE=nmake /nologo
CC=cl /nologo

all: programma.exe
programma.exe: main.obj fun_bq.obj fun_io.obj fun_math.obj
$(CC) main.obj fun_bq.obj fun_io.obj fun_math.obj /out:programma.exe

main.obj: main.c fun_bq.h fun_math.h fun_io.h
fun_bq.obj: fun_bq.c fun_bq.h
fun_io.obj: fun_io.c fun_io.h
fun_math.obj: fun_math.c fun_math.h



#main.obj: main.c fun_bq.h fun_math.h fun_io.h
# $(CC) $(cvars) main.c

#fun_bq.obj: fun_bq.c fun_bq.h
# $(CC) $(cvars) fun_bq.c

#fun_io.obj: fun_io.c fun_io.h
# $(CC) $(cvars) fun_io.c

#fun_math.obj: fun_math.c fun_math.h
# $(CC) $(cvars) fun_math.c


Mentre sotto linux lancio questo
CC=gcc

all: programma
programma: main.o fun_bq.o fun_io.o fun_math.o
$(CC) main.o fun_bq.o fun_io.o fun_math.o -o programma -lm -Wall

main.o: main.c fun_bq.h fun_math.h fun_io.h
$(CC) -c main.c

fun_bq.o: fun_bq.c fun_bq.h
$(CC) -c fun_bq.c

fun_io.o: fun_io.c fun_io.h
$(CC) -c fun_io.c

fun_math.o: fun_math.c fun_math.h
$(CC) -c fun_math.c

clean:
rm -rf *.o programma
Tutti i consigli sono ben accetti :help:

71104
08-07-2008, 14:59
non ti serve Visual Studio, ti basta il Windows SDK che è pure gratuito.
una volta che l'hai installato (queste indicazioni fanno riferimento alla versione 6.1, che è quella che ho io) vai su Start, All Programs, Microsoft Windows SDK v6.1, e apri CMD Shell; da lì puoi lanciare nmake.

salvodel
08-07-2008, 15:08
non ti serve Visual Studio, ti basta il Windows SDK che è pure gratuito.
una volta che l'hai installato (queste indicazioni fanno riferimento alla versione 6.1, che è quella che ho io) vai su Start, All Programs, Microsoft Windows SDK v6.1, e apri CMD Shell; da lì puoi lanciare nmake.

Grazie per la risposta. Scusa la mia ignoranza che si palesa in una forma espressiva priva di basi informatiche ma non è questo il problema. Quello che volevo dire è che se io faccio nmake /f Makefile.vc dalla shell di Visual C++2005(che quindi è SDK che dicevi tu) mi da errore mentre se faccio make -f Makefile va tutto liscio.
Dov'è l'errore nel Makefile che utilizzo sotto windows?
Di nuovo grazie

71104
09-07-2008, 01:08
"mi da errore" cosa significa? io avevo capito che non trovava nmake.exe, quindi ti dicevo di usare un build environment. quale programma di preciso ti da errore, nmake o cl? puoi riportare tutto l'output? ad una lettura veloce del makefile che hai scritto mi pare che l'unica irregolarità (e non sono neanche sicuro che sia un'irregolarità) è che alla linea 6, quando chiami cl coi file oggetto, l'opzione /out dovrebbe andare prima della lista dei files di input, non dopo.

salvodel
09-07-2008, 10:08
"mi da errore" cosa significa? io avevo capito che non trovava nmake.exe, quindi ti dicevo di usare un build environment. quale programma di preciso ti da errore, nmake o cl? puoi riportare tutto l'output? ad una lettura veloce del makefile che hai scritto mi pare che l'unica irregolarità (e non sono neanche sicuro che sia un'irregolarità) è che alla linea 6, quando chiami cl coi file oggetto, l'opzione /out dovrebbe andare prima della lista dei files di input, non dopo.

Ora va. Ho modificato cosi il Makefile.vc ed adesso sembra funzionare. Sinceramente non mi è molto chiaro quello che ho fatto ma è una delle poche cose che mancava nel mio rispetto ad un altro che avevo :D .
MAKE=nmake /nologo
CC=cl /nologo
LDFLAGS=/link /subsystem:console /opt:ref

all: programma.exe
programma.exe: main.obj fun_boat.obj fun_io.obj fun_math.obj
$(CC) main.obj fun_boat.obj fun_io.obj fun_math.obj $(LDFLAGS) /out:programma.exe

main.obj: main.c fun_boat.h fun_math.h fun_io.h
fun_boat.obj: fun_boat.c fun_boat.h
fun_io.obj: fun_io.c fun_io.h
fun_math.obj: fun_math.c fun_math.h



#main.obj: main.c fun_boat.h fun_math.h fun_io.h
# $(CC) $(cvars) main.c

#fun_boat.obj: fun_boat.c fun_boat.h
# $(CC) $(cvars) fun_boat.c

#fun_io.obj: fun_io.c fun_io.h
# $(CC) $(cvars) fun_io.c

#fun_math.obj: fun_math.c fun_math.h
# $(CC) $(cvars) fun_math.c
In ogni caso grazie mille per l'aiuto.
Ciao