Εμφάνιση 1-3 από 3
  1. #1
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    49
    Μηνύματα
    11.661
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    300 Mbps down/10 Mbps up
    ISP
    Spectrum
    Είμαι ψιλοάσχετος με το automake οπότε μπορεί να κάνω χαζή ερώτηση ή/και βασικά λάθη.

    Έχω το παρακάτω:
    Spoiler:
    Κώδικας:
    export FoX=$(HOME)/lib/FoX
    export ROOT_DIR=$(shell pwd)
    export TEST_DIR=$(ROOT_DIR)/test
    export MODEL_DIR=$(ROOT_DIR)/model
    export AR=ar
    export FC=gfortran
    FFILES=test.f90 tree.f90 paper.f90
    export FFLAGS=-g \
                  -cpp \
                  -fbounds-check \
                  -fcheck-array-temporaries \
                  -ffpe-trap=invalid,zero,overflow,underflow \
                  -fbacktrace \
                  -finit-real=snan \
                  -Wall
    export LFLAGS=$(FFLAGS)
    export FOPT=-O2
    export INC_DIR+=-I$(MODEL_DIR) -I$(FoX)/finclude
    export LIB_DIR+=-L$(MODEL_DIR) -L$(FoX)/lib
    export LIBS+=-le-MODELtree -lFoX_wkml -lFoX_dom -lFoX_sax -lFoX_wcml -lFoX_wxml -lFoX_common -lFoX_utils -lFoX_fsys
    
    # standard Makefile stuff
    .SUFFIXES: .f90 .o
    .PHONY: clean depend all model test tree paper
    
    # objects and modules
    OBJ=$(FFILES:.f90=.o)
    MODtmp=$(FFILES:.f90=.mod)
    MOD=$(shell echo $(MODtmp) | tr A-Z a-z) # convert to lowercase
    EXE=$(FFILES:.f90=.x)
    
    # do everything
    all: model test tree paper
    
    model:
            @$(MAKE) -C $(MODEL_DIR)
    
    test: model test.x
    
    tree: model tree.x
    
    paper: model paper.x
    
    # compile
    %.o: %.f90
            @echo -n "Compiling $<..."
            @$(FC) $(FOPT) $(FFLAGS) $(INC_DIR) -c $<
            @echo "Done!"
    
    # link
    %.x: %.o
            @echo -n "Linking $@..."
            @$(FC) $(FOPT) $(LFLAGS) $(LIB_DIR) -o $@ $< $(LIBS)
            @echo "Done!"
    
    clean:
            @$(MAKE) -C $(MODEL_DIR) clean
            rm -f $(OBJ) $(MOD) $(EXE) Makefile.dep


    Στην ουσία, θέλω να κάνω compile τρία προγράμματα: test.f90, tree.f90, paper.f90. Και τα τρία εξαρτώνται από τη βιβλιοθήκη που φτιάχνεται μέσα στο MODEL_DIR, και έχει δικό της Makefile, το οποίο δουλεύει μια χαρά. Όταν κάνω compile με make όλα καλά, όταν κάνω με make -j έχω σφάλματα του στυλ:

    Κώδικας:
    test.f90:3.4:
    
    use constants, only: dp
        1
    Fatal Error: Can't open module file 'constants.mod' for reading at (1): No such file or directory
    Λογικά κάποιο σφάλμα κάνω με τα dependencies που ορίζονται με το dependency του model, το οποίο δουλεύει σειριακά αλλά παράλληλα χτυπάει σε κάποιο race condition. Τι κάνω λάθος;

    Ευχαριστώ πολύ.

  2. #2
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.224
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από tsigarid Εμφάνιση μηνυμάτων

    Κώδικας:
    # compile
    %.o: %.f90
            @echo -n "Compiling $<..."
            @$(FC) $(FOPT) $(FFLAGS) $(INC_DIR) -c $<
            @echo "Done!"
    Στην ουσία, θέλω να κάνω compile τρία προγράμματα: test.f90, tree.f90, paper.f90. Και τα τρία εξαρτώνται από τη βιβλιοθήκη που φτιάχνεται μέσα στο MODEL_DIR, και έχει δικό της Makefile, το οποίο δουλεύει μια χαρά. Όταν κάνω compile με make όλα καλά, όταν κάνω με make -j έχω σφάλματα του στυλ:

    Κώδικας:
    test.f90:3.4:
    
    use constants, only: dp
        1
    Fatal Error: Can't open module file 'constants.mod' for reading at (1): No such file or directory
    Λογικά κάποιο σφάλμα κάνω με τα dependencies που ορίζονται με το dependency του model, το οποίο δουλεύει σειριακά αλλά παράλληλα χτυπάει σε κάποιο race condition. Τι κάνω λάθος;

    Ευχαριστώ πολύ.
    Δεν θυμάμαι τίποτα από fortran οπότε χωρίς τον κώδικα για να το δοκιμάσω ίσως πω βλακεία αλλά ένα πράγμα που μου έρχεται στο μυαλό είναι αυτό που λες. Όταν πας σειριακά, γίνεται πρώτα compile το constants.mod το οποίο μετά υπάρχει και πετυχαίνει το test.f90 ενώ με την παραλληλία πάει να χτίσει πρώτα το test και αποτυγχάνει.

    Μήπως λοιπόν εκτός από τον γενικό κανόνα "%.o: %.f90" πρέπει να προσθέσεις ένα κανόνα τύπου "test.o: constants.mod" ή παρόμοιο που να δηλώνεις ότι το test χρειάζεται και το constants ώστε το make να το παράξει πριν πάει να χτίσει το test ?
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  3. #3
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    49
    Μηνύματα
    11.661
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    300 Mbps down/10 Mbps up
    ISP
    Spectrum
    Αυτό που λες το αναλαμβάνει το Makefile στο subdirectory. Εκτός του, τα deep dependencies θα πρέπει να είναι άσχετα.

Παρόμοια Θέματα

  1. ΕΡΩΤΗΣΗ ΓΙΑ ΣΥΣΤΗΜΑ ΣΥΝΑΓΕΡΜΟΥ
    Από explorerSS στο φόρουμ Εκτός θέματος
    Μηνύματα: 4
    Τελευταίο Μήνυμα: 03-05-17, 10:05
  2. Ερώτηση για GPU overclock.
    Από SpaceMarine13 στο φόρουμ Κάρτες ήχου, γραφικών, ηχεία και οθόνες
    Μηνύματα: 6
    Τελευταίο Μήνυμα: 28-11-16, 23:19
  3. Ερωτηση για VDSL
    Από Ore12 στο φόρουμ VDSL
    Μηνύματα: 1
    Τελευταίο Μήνυμα: 21-09-16, 23:07
  4. Ερωτηση για ακτινοβολια
    Από IRONDIM στο φόρουμ Ασύρματη Ευρυζωνικότητα
    Μηνύματα: 22
    Τελευταίο Μήνυμα: 20-05-16, 10:09

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας