Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2007, 21:01   #1
fastmagister
Junior Member
 
Iscritto dal: May 2006
Messaggi: 13
[C] Makefile: definire correttamente path

Ciao a tutti,

credo che il mio problema sia più difficile da spiegare che da affrontare, comunque, la situazione è questa:

ho sviluppato diverse funzioni in C (poniamo FUN_A, FUN_B,..., FUN_X), ognuna in un file diverso (FILE_A, FILE_B, ..., FILE_X), ed ho creato un header file con i prototipi di queste funzioni. Ho quindi inserito ognuno dei file creati in una diversa cartella (poniamo DIR_A, DIR_B, ..., DIR_X) insieme con una copia del file header e con un file .c contenente un main che richiami esclusivamente la funzione in quella cartella. Per ogni cartella ho creato un makefile che compila correttamente il programma in essa.

Detto questo, la questione è: se spostassi tutti i file con le funzioni in un unica cartella insieme al file header (poniamo /home/mionome/SORGENTI) ed avessi in un'altra cartella (poniamo /home/mionome/TEST) un file .c con un main che richiama una di queste funzioni, come dovrei variare il makefile per avere ancora una corretta compilazione?

Vi posto qui di seguito uno dei makefile funzionanti fin quando funzione, programma principale ed header sono tutti nella stessa cartella:
Codice PHP:
OBJ=   FUN_A.o TEST.o

main
: $(OBJ)
    
g++ -o main $(OBJ)  -lm -lg2c

.c.o:
    
cc --O2 $<

.
f.o:
    
f77 --O2 $<

clean:
    
rm *.o main 
In pratica, cosa devo aggiungere al makefile per dirgli dove sono tutte le risorse di cui ha bisogno?

Qualcuno mi diceva che occorre inserire qualcosa del tipo $(PATH)/SORGENTI o $(PATH)/TEST ma come...??

Spero di essermi fatto capire, grazie 100...
fastmagister è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 10:40   #2
fastmagister
Junior Member
 
Iscritto dal: May 2006
Messaggi: 13
possibile che nessuno abbia mai scritto o sappia scrivere un makefile un makefile per applicazioni ripartite tra più directory...?
fastmagister è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 11:10   #3
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
io ad esempio uso un makefile di questo tipo

Codice:
DIR              = -I . -I ./folder1/ -I ./folder2

all: srcs $(PROGS)

srcs:
        @$(CC) $(DIR) $(CFLAGS) -c $(SRCS)

$(PROGS): $(OBJS)
        @$(CC) $(DIR) $(LFLAGS) $(CFLAGS) -o $(PROGS) $(OBJS)
e sono a posto
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 11:20   #4
fastmagister
Junior Member
 
Iscritto dal: May 2006
Messaggi: 13
Quote:
Originariamente inviato da recoil Guarda i messaggi
io ad esempio uso un makefile di questo tipo

Codice:
DIR              = -I . -I ./folder1/ -I ./folder2

all: srcs $(PROGS)

srcs:
        @$(CC) $(DIR) $(CFLAGS) -c $(SRCS)

$(PROGS): $(OBJS)
        @$(CC) $(DIR) $(LFLAGS) $(CFLAGS) -o $(PROGS) $(OBJS)
e sono a posto
Ok, ma come "setti" le diverse macro..? Che valore hanno?
fastmagister è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 12:24   #5
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
scusa ho messo solo un pezzo :P

Codice:
CC       = gcc
CFLAGS   = -g -m32
LFLAGS   = -lm
PROGS    = converter
SRCS     = converter.c conversions.c scale.c 
OBJS     = converter.o conversions.o scale.o image.o
DIR              = -I . -I ./conversions/

all: srcs $(PROGS)

srcs:
        @$(CC) $(DIR) $(CFLAGS) -c $(SRCS)

$(PROGS): $(OBJS)
        @$(CC) $(DIR) $(LFLAGS) $(CFLAGS) -o $(PROGS) $(OBJS)
clean:
        @rm $(PROGS) $(OBJS)
nella cartella conversions ho un Makefile che mi crea l'object image.o
altrimenti avrei dovuto usare solo il Makefile che vedi mettendo ./conversions/image.c tra i sorgenti (SRCS)

Ultima modifica di recoil : 17-05-2007 alle 12:30.
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 13:03   #6
fastmagister
Junior Member
 
Iscritto dal: May 2006
Messaggi: 13
Quote:
Originariamente inviato da recoil Guarda i messaggi
nella cartella conversions ho un Makefile che mi crea l'object image.o
altrimenti avrei dovuto usare solo il Makefile che vedi mettendo ./conversions/image.c tra i sorgenti (SRCS)
Il main è nel file converter.c che non è nella cartella conversions, giusto?

La cartella conversions deve essere necessariamente una sottocartella della cartella dove hai il makefile postato o può essere ovunque nel filesystem?

Grazie 1000 comunque, mi sei stato molto d'aiuto

Ultima modifica di fastmagister : 17-05-2007 alle 13:08.
fastmagister è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 15:20   #7
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
l'altra cartella potrebbe essere ovunque, basta specificare il path corretto
il main è in converter.c
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2007, 15:25   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Fammi capire...vuoi fare una ricorsione nelle sottodirectory ?
In tal caso devi avere un Makefile anche nelle sottodirectory...ed eseguire la ricorsione dal Makefile principale...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 24-05-2007, 18:45   #9
fastmagister
Junior Member
 
Iscritto dal: May 2006
Messaggi: 13
Allora, siccome permangono dei problemi (non trova i files nonostante indichi i path), vediamo se riferendoci al più banale degli esempi riusciamo...

Allora, nella mia home directory ho "main.c" così fatto:
Codice PHP:
#include<stdlib.h>
#include<stdio.h>

int main()
{
 
saluta(1);

Nella stessa home directory ho la cartella CART che contiene il file "saluta.c" così fatto:
Codice PHP:
#include<stdlib.h>
#include<stdio.h>

void saluta(int x)
{
 if (
== 1)
    
printf("\nCiao mondo\n");
 else
    
printf("\nHello world\n");

Ed infine, sempre in CART ho il file "lib.h" contenente esclusivamente la riga:
Codice PHP:
void saluta(int); 

Ora, la situazione reale è ben più complessa, ma attenendoci all'esempio banale riportato, voi come lo scrivereste il makefile?? Grazie a tutti
fastmagister è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
A Seul in arrivo nuovi incentivi per aut...
7 offerte nuove di zecca Amazon, altre a...
Una giornata di lavoro con l'IA consuma ...
'Non fate usare ChatGPT ai vostri cari':...
Un display che si allunga fino al 200% s...
X rende open source il suo algoritmo: si...
Ryanair si prepara a un'estate da record...
Robot aspirapolvere da 199€ su Amazon: D...
Questo deumidificatore COMFEE' da 12L/24...
GoPro HERO13 Black Ultra Wide Edition ca...
L'Unione Europea prepara un nuovo pacche...
L'arma segreta di Kiev non spara ma potr...
Hitman: World of Assassination introduce...
Netflix non si ferma più: record di abbo...
Porsche America è riuscita ad abi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v