grep и sed в фортранском Makefile - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть код на Фортране, который можно скомпилировать с помощью следующего файла Makefile:

FC = mpif90  
FFLAGS := ...

TARGET = run1

SRC = main.f90 param.f90 ...
OBJ = $(SRC:.f90=.o)

all: $(TARGET)
$(TARGET): $(OBJ) $(FC) $(FFLAGS)
...

В приведенном выше примере TARGET может быть run1 или run2 или run3 , в зависимости от значения переменной в моем скрипте.Например, если у меня есть следующее в param.f90:

character(len=1), parameter :: case_num = "1"

Затем я хочу, чтобы переменная TARGET была установлена ​​в run1 .Теперь вопрос в том, как сделать это автоматически, не меняя вручную каждый раз Makefile?

Я пробовал что-то вроде

num = $(grep 'case_num = "' param.f90 | sed -n -e 's/^.*case_num = "//p' | cut -c1-1)
TARGET = run$num

в Makefile, что не работает.Я проверил правильность предложения grep и sed в обычном скрипте bash.Как сделать это в Фортран Makefile?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 февраля 2019

Ваш make-файл отображается в make-файле GNU Make.Чтобы назначить вывод команды оболочки переменной make, вам нужно использовать функцию $(shell ...) , например:

num := $(shell grep 'case_num = "' param.f90 | sed -n -e 's/^.*case_num = "//p' | cut -c1-1)
TARGET := run$(num)
...