Newsgroup: it.comp.lang.c
Titolo: Makefile

Buongiorno a tutti.
Ho un problema cun un makefile e con questa direttiva in particolare
[...]
$(CPPOBJ) : %.o : %.cpp
	@echo
	@echo $(MSG_COMPILINGCPP) $<
	$(CPP) -c $(ALL_CFLAGS) $(CPPFLAGS) $< -o $@
[...]
Funziona tutto, pero' sia i file sorgenti, che quelli oggetto devono essere
nella stessa directory.
Alla fine della compilazione mi ritrovo con un mucchio di file nella setssa
directory.
Io vorrei dividerli in due directory, i sorgenti nella directory src e gli
oggetto nella directory obj.
Qualcuno ha qualche idea su come comporre una regola di dipendenza che tenga
conto che i due file sono in directory diffrenti?
Grazie
GIGI
 
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Non saprei, ma potresti fare qualcosa del tipo
movefile :
        mv *.o /dir_o
        mc *.c /dir_c
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

         mc *.c /dir_c
dimenticavo, ovviamente la usi con "make movefile"


 nella stessa directory.
Puoi provare cosi':
obj/%.o: src/%.c
 Ciao
 Federico
 

 dimenticavo, ovviamente la usi con "make movefile"
Grazie del suggerimento, ma non e' cio' che desidero fare.
Io non voglio compilare e poi spostare i file in directory differenti, ma
voglio che il makefile tenga conto del fatto che i sorgenti sono nella
directory src e gli oggetti sono nella directory obj e che mantenga
correttamente la dipendenza tra le coppie di file .c e .o il primo nella
\src e il secondo nella \obj.
Se riesco a istruire il makefile su questa cosa, egli in futuro compilera'
solamente i file sorgente modificati e non tutti ogni volta.
Io sono convinto che cio' si possa fare, ma non ho ancora capito come.



Veramente ho privato anche io a utilizzare questa sintassi, ma non funziona
perche' nella direttiva di compilazione che segue al riga anziche'
src/stdio.c viene applicato solamente src.
Comunque provo ancora a fare qualche esperimento per vedere se scopro
qualcosa di piu'.
Non sono espertissimo in makefile e' ho scoperto che ci sono veramente tante
direttive.
Ciao e buona giornata


Ti spiego come faccio io:
programma	/* directory principale del programma */
   |
   \__src	/* directory con i sorgenti */
in 'programma' metto i seguenti file:
1) 
configure.in
2) Makefile.am
3) automake.sh /* non strettamente necessario, ma comodo */
/*
CONFIGURE.IN
*/
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/nomeProg.c)
AM_INIT_AUTOMAKE(nomeProg,1.0)
dnl Checks for programs.
AC_PROG_AWK
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
dnl Checks for libraries.
dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h])
dnl Checks for typedefs, structures, and compiler characteristics.
dnl Checks for library functions.
AC_OUTPUT(src/Makefile Makefile)
/******************************************************/
/*
MAKEFILE.AM
*/
SUBDIRS = . src
/******************************************************/
/*AUTOMAKE.SH*/
#!/bin/bash
exec `aclocal`;
exec `autoconf`;
exec `touch README ChangeLog AUTHORS NEWS`;
exec `automake -a`;
/******************************************************/
In 'src' ci sono i sorgenti piu' il file:
1) Makefile.am
/*
MAKEFILE.AM
*/
bin_PROGRAMS = nomeProg
nomeProg_SOURCES = nomeProg.c
AM_CFLAGS = -Wall
/******************************************************/
La prima cosa da fare e' rendere eseguibile automake.sh e lanciarlo.
Vengono creati tutta una serie di file tra cui il configure.
A quel punto dovresti sapere come si va avanti:
$ ./configure
$ make
Per ulteriori informazioni leggi i manuali (bastano pochi paragrafi in 
realta') degli autotools.
ciao


Ciao Fabio,
anche io ho una struttura simile alla tua, ma vorrei arrivare ad avere una
struttura con due sottodirectory di questo tipo :
programma
    |
    |\ src ( qui solo i sorgenti )
    |
    \obj ( qui solo gli oggetti )
Suppongo che anche tu dopo la compilazione ti ritroverai con tutti i file
sorgenti e oggetto entrambi nella directory src. Io invece vorrei che siano
nelle due directory src e obj.


 anziche' src/stdio.c viene applicato solamente src.
Ciao,
 mi sa che devi cambiare anche la variabile CPPOBJ:
CPPOBJ = obj/stdio.o obj/timer.o obj/prova.o
 Ciao
 Federico

 CPPOBJ = obj/stdio.o obj/timer.o obj/prova.o
Ciao Federico,
ho risolto il mio problema utilizzando questa variabile nel mio makefile
VPATH = src:obj
Essa imposta due directory, quella dei sorgenti e quella degli oggetti, ove
andare a cercare i file per risolvere le dipendenze.
Ciao a tutti e grazie
