Я пытаюсь скомпилировать исходный код различными способами. Например, предположим, что я хочу скомпилировать фортран-программу с исходным кодом main.f90 , file1.f90 и file2.f90 качестве входных данных. Чтобы сгенерировать hello.exe , я бы просто сделал
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
Теперь предположим, что я хочу сделать разные версии этого и сравнить результаты. Я хотел бы создать hello_O2.exe который использует флаг компиляции -O2 , версию hello_O3.exe с флагом -O3 и даже компилировать с различными компиляторами. Я хотел бы hello_intel_O2.exe который использует флаг -O2 а также использует компилятор Intel ifort , например.
В идеале я бы хотел указать make intelO3 для использования компилятора ifort и флага -O3 который и сгенерирует исполняемый файл hello_intel_O3.exe . Если я указываю , make all это создало бы бинарные файлы hello_O2.exe hello_O3.exe hello_intel_O2.exe и hello_intel_O3.exe каждый с правильным уровнем компилятора и оптимизации.
Как это может быть достигнуто в этом минимальном примере? Мой настоящий Makefile сейчас ~ 120 строк и использует много переменных, которые я меняю каждый раз, когда хочу построить для другой версии.
