Προς το περιεχόμενο

Παιχνίδι 2048 σε C


johnny.tifosi

Προτεινόμενες αναρτήσεις

...

Να ρωτήσω κάτι σχετικά με τον GCC. Γιατί απλά δεν του λέμε να βγάλει τα object files με την -c μονo Πχ gcc -c main.c / όλα τα αλλα .c και μετά όπως ήδη το κάνουμε μονο gcc -ο. Κάτι είχα κάνει και γκρίνιαξε ότι η -c με την -ο είναι ασύμβατες αλλα δεν θυμάμαι. :unsure: Τέλοσπαντων, δεν έχει και σημασία εγκυκλοπαιδική ερώτηση είναι.

Μάλλον θα είχες κάποιο λάθος στη σύνταξη ή στις εξαρτήσεις μέσα στο makefile. Δεν υπάρχει πρόβλημα αν σπάσει η διαδικασία σε 2 φάσεις (-c και μετά -ο).

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 272
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Να ρωτήσω κάτι σχετικά με τον GCC. Γιατί απλά δεν του λέμε να βγάλει τα object files με την -c μονo Πχ gcc -c main.c / όλα τα αλλα .c και μετά όπως ήδη το κάνουμε μονο gcc -ο. Κάτι είχα κάνει και γκρίνιαξε ότι η -c με την -ο είναι ασύμβατες αλλα δεν θυμάμαι. :unsure: Τέλοσπαντων, δεν έχει και σημασία εγκυκλοπαιδική ερώτηση είναι.

Η -o δηλώνει το όνομα του αρχείου εξόδου και δουλεύει σε όλες τις καταστάσεις είτε πραγματοποιείς μόνο compilation με την -c ή και linking χωρίς -c. Η "ασυμβατότητα" που λες προκαλείται όταν καλείς τον gcc με λάθος τρόπο.

 

Ας δούμε κάποια παραδείγματα:

 

% cc -std=c99 -c -o mitsos.o main.c
Λες στον gcc να μην ονομάσει το παραγόμενο object file ως main.o από το όνομα του κώδικα αλλά να το ονομάσει mitsos.o. Δεν υπάρχει κανένα πρόβλημα και όλα λειτουργούν σωστά.

 

% cc -std=c99 -o 2048cc *.c        
Και εδώ όλα λειτουργούν σωστά γιατί λες στον gcc να πραγματοποιήσει δύο βήματα. Το ένα είναι αυτό της compilation που θα παράγει ένα αρχείο .o για κάθε .c αρχείο (σαν να είχες τρέξει "gcc -c *.c" ή "gcc -c -o τάδε.o τάδε.c" για κάθε αρχείο) και ένα βήμα αυτό του linking το οποίο θα ενώσει όλα τα object αρχεία σε ένα εκτελέσιμο αρχείο με όνομα 2048cc (σαν να είχες τρέξει "gcc -o 2048cc *.o"). Τα ενδιάμεσα object αρχεία σβήνονται οπότε δεν παρατηρείς κάτι και φαίνεται σαν να γίνεται μόνο ένα βήμα.

 

% cc -std=c99 -o 2048cc -c *.c
cc: μοιραίο σφάλμα: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
Εδώ υφίσταται η ασυμβατότητα μεταξύ -o και -c γιατί του λες να κάνει compile όλα τα αρχεία .c και να τους δώσει ένα όνομα εξόδου. Δεν γίνεται όμως Ν αρχεία να ονομαστούν όλα με το ίδιο όνομα για αυτό σου βαράει. Χωρίς το -c δεν σου βαράει γιατί όπως είπαμε το -o αναφέρεται στο βήμα του linking όπου έχεις μόνο μία έξοδο (το εκτελέσιμο)

 

% cp *.c mitsos.c 
cp: target «mitsos.c» is not a directory
Αυτό δεν είναι bug του gcc αλλά όπως βλέπεις το ίδιο ισχύει παντού. Αν πάω να αντιγράψω Ν αρχεία σε ένα αρχείο μου λέει ότι το mitsos.c δεν είναι κατάλογος οπότε δεν μπορεί να δουλέψει.
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...