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.