Estou tentando compilar o código-fonte de várias maneiras. Por exemplo, suponha que eu queira compilar um programa fortran com o código-fonte main.f90 , file1.f90 e file2.f90 como entradas. Para gerar hello.exe , eu simplesmente faria
FC=gfortran
EXE=hello.exe
OBJS=file1.o file2.o
FFLAGS=
$(EXE): $(OBJS)
$(FC) $(FFLAGS) main.f90 $(OBJS) -o $(EXE)
file1.o: file1.f90
$(FC) $(FFLAGS) -c file1.f90
file2.o: file2.f90
$(FC) $(FFLAGS) -c file2.f90
clean:
rm -rf *.o
Agora, suponha que eu queira fazer várias versões disso e comparar a saída. Eu gostaria de fazer um hello_O2.exe que usa o sinalizador de compilação -O2 , uma versão hello_O3.exe com um sinal -O3 e até compilar com compiladores diferentes. Eu gostaria de um hello_intel_O2.exe que usa o -O2 sinalizador, bem como usa o compilador ifort intel, por exemplo.
Idealmente, gostaria de especificar make intelO3 para usar o compilador ifort e -O3 que geraria o executável hello_intel_O3.exe . Se eu especificar make all , ele criaria os binários hello_O2.exe , hello_O3.exe , hello_intel_O2.exe e hello_intel_O3.exe , cada um com os níveis corretos de compilador e otimização.
Como isso pode ser alcançado neste exemplo mínimo? Meu Makefile atual tem ~ 120 linhas agora e usa muitas variáveis que eu mudo cada vez que quero construir para uma versão diferente.