Sto cercando di capire come dovrebbe apparire un Makefile, quando si tratta delle bandiere, specialmente quelle di collegamento. Qui è la mia Makefile:Makefiile con molte bandiere
OBJS = n.o
SOURCE = n.cpp
# HEADER = there are no header files, so I commented that
OUT = test
CXX = ../mpich-install/bin/mpic++
FLAGS = -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilp64.a -Wl,--start-group ../intel/mkl/lib/intel64/libmkl_intel_ilp64.a ../intel/mkl/lib/intel64/libmkl_core.a ../intel/mkl/lib/intel64/libmkl_sequential.a -Wl,--end-group ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilp64.a -lpthread -lm -ldl
all: $(OBJS)
$(CXX) $(OBJS) -o $(OUT) $(FLAGS)
# create/compile the individual files >>separately<<
n.o: n.cpp
$(CXX) -c n.cpp $(FLAGS)
.PHONY : all
# clean house
clean:
rm -f $(OBJS)
e poi io sono sempre:
../mpich-install/bin/mpic++ -c n.cpp -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilp64.a -Wl,--start-group ../intel/mkl/lib/intel64/libmkl_intel_ilp64.a ../intel/mkl/lib/intel64/libmkl_core.a ../intel/mkl/lib/intel64/libmkl_sequential.a -Wl,--end-group ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilp64.a -lpthread -lm -ldl
g++: warning: ../intel/mkl/lib/intel64/libmkl_scalapack_ilp64.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_intel_ilp64.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_core.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_sequential.a: linker input file unused because linking not done
g++: warning: ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilp64.a: linker input file unused because linking not done
../mpich-install/bin/mpic++ n.o -o test -I../intel/mkl/include ../intel/mkl/lib/intel64/libmkl_scalapack_ilp64.a -Wl,--start-group ../intel/mkl/lib/intel64/libmkl_intel_ilp64.a ../intel/mkl/lib/intel64/libmkl_core.a ../intel/mkl/lib/intel64/libmkl_sequential.a -Wl,--end-group ../intel/mkl/lib/intel64/libmkl_blacs_intelmpi_ilp64.a -lpthread -lm -ldl
Ciò significa che dovrei usare alcune bandiere solo nell'ultima parte del processo. Qual è il modo corretto per gestire un caso del genere? Forse creare FLAGS1
e FLAGS2
? Dovrebbe funzionare, ma voglio sapere quale sia il modo corretto.
Le bandiere usate per la compilazione e linking sono diversi. È necessario utilizzare i flag appropriati per ogni passaggio in ogni passaggio. Dai un'occhiata all'output di 'make -qp' (salvalo in un file) e osserva le regole predefinite che rendono built-in per compilare e collegare file C e C++. Questo dovrebbe aiutare a chiarire alcune cose. –
Stai usando 'FLAGS' come un tipo di argomento" non mi interessa quale fase della build siamo dentro "- questo non è il modo giusto di fare le cose. I flag di compilazione sono (principalmente) diversi dal collegamento di flag, quindi non dovresti unirli a loro. Invece, separa i tuoi 'CFLAGS' (o' CPPFLAGS' in questo caso) dal tuo 'LFLAGS'. – mah
Grazie @mah ed Etan !! – gsamaras