Ich habe eine Reihe von Programmen, die unter Ubuntu gut kompilieren und ich arbeite an einem Setup, um auch auf Windows zu kompilieren. Ich benutze MSYS2.Makefile funktioniert nur mit relativen Pfaden auf MSYS2 (Windows)
Es gibt ein Hauptmakefile, die wie folgt aussieht:
#### Project main directory
DIR_MAIN=$(shell pwd)
#### Compile all
all:
@$(MAKE) -C src/Misc DIR_MAIN=$(DIR_MAIN)
@$(MAKE) -C src/CF_states DIR_MAIN=$(DIR_MAIN)
etcetera. In src/
gibt es Ordner, die jeweils ein bestimmtes Makefile für dieses Projekt enthalten. Sie haben die folgende Struktur:
#### Directories and flags
ifndef $(DIR_MAIN)
DIR_MAIN=../..
endif
DIR_EXE=$(DIR_MAIN)/Programs
DIR_SRC=$(DIR_MAIN)/src/Misc
DIR_SFMT_SRC=$(DIR_MAIN)/src/sfmt
DIR_BLD=$(DIR_MAIN)/build/Misc
COMP=g++
COMPILE_FLAGS= -std=c++11 -O3 -lstdc++ -msse2
LINK_FLAGS= -O3 -fopenmp -lgsl -lgslcblas -lm -lhdf5_cpp -lhdf5
#### Compile all
all: setup $(DIR_BLD)/input.o $(DIR_BLD)/misc_sphere.o $(DIR_BLD)/misc.o
setup:
@mkdir -p $(DIR_BLD)
@mkdir -p $(DIR_EXE)
#### Misc source
$(DIR_BLD)/input.o: $(DIR_SRC)/input.cpp $(DIR_SRC)/input.h $(DIR_SRC)/misc_sphere.h
${COMP} -c input.cpp ${COMPILE_FLAGS} -o [email protected]
$(DIR_BLD)/misc_sphere.o: $(DIR_SRC)/misc_sphere.cpp $(DIR_SRC)/misc_sphere.h $(DIR_SRC)/misc.h
${COMP} -c misc_sphere.cpp ${COMPILE_FLAGS} -o [email protected]
$(DIR_BLD)/misc.o: $(DIR_SRC)/misc.cpp $(DIR_SRC)/misc.h
${COMP} -c misc.cpp ${COMPILE_FLAGS} -o [email protected]
Auf diese Weise der spezifischen Makefiles aus ihrem Ordner in src/
ausgeführt werden, unter Verwendung von relativen Pfaden oder von der Hauptmakefile, mit absoluten Pfaden.
Dies funktioniert auf Ubuntu, aber auf MSYS2 funktionieren nur die relativen Pfade, d. H. Das Ausführen jedes der spezifischen Makefiles aus ihren Ordnern. Als ich die Hauptmakefile laufen mit
mingw32-make.exe
Ich erhalte den Fehler
$ mingw32-make.exe
mingw32-make[1]: Entering directory 'C:/msys64/home/Jorgen/fqhe_mc_sphere/src/Misc'
mingw32-make[1]: *** No rule to make target '/home/Jorgen/fqhe_mc_sphere/src/Misc/input.cpp', needed by '/home/Jorgen/fqhe_mc_sphere/build/Misc/input.o'. Stop.
mingw32-make[1]: Leaving directory 'C:/msys64/home/Jorgen/fqhe_mc_sphere/src/Misc'
Makefile:8: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
, obwohl die Datei /home/Jorgen/fqhe_mc_sphere/src/Misc/input.cpp
gibt es, wie ich ls
mit überprüfen können. Irgendeine Idee warum?
EDIT:
das erste Ziel in relative Pfade mit Ausnahme des Ergebnis ändern, dh
$(DIR_BLD)/input.o: input.cpp input.h misc_sphere.h
${COMP} -c input.cpp ${COMPILE_FLAGS} -o [email protected]
I einen ähnlichen Fehler für die Ausgangsobjektdatei erhalten:
Fatal error: can't create /home/Jorgen/fqhe_mc_sphere/build/Misc/input.o: No such file or directory
Obwohl die Ordner /home/Jorgen/fqhe_mc_sphere/build/Misc/
existiert nicht.
Ich habe versucht, MSYS2 als Administrator ausgeführt, die nicht geholfen hat.
Versuchen Sie 'make' unter MSYS2 auszuführen, nicht' mingw32-make'. – user657267