Bash Fortran生成文件中的grep和sed

Bash Fortran生成文件中的grep和sed,bash,makefile,fortran,fortran90,Bash,Makefile,Fortran,Fortran90,我有一个Fortran代码,可以通过以下Makefile编译: FC = mpif90 FFLAGS := ... TARGET = run1 SRC = main.f90 param.f90 ... OBJ = $(SRC:.f90=.o) all: $(TARGET) $(TARGET): $(OBJ) $(FC) $(FFLAGS) ... 在上面的例子中,目标可以是run1、run2或run3,具体取决于脚本中变量的值。例如,如果param.f90中有以下内容: charac

我有一个Fortran代码,可以通过以下Makefile编译:

FC = mpif90  
FFLAGS := ...

TARGET = run1

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

all: $(TARGET)
$(TARGET): $(OBJ) $(FC) $(FFLAGS)
...
在上面的例子中,目标可以是run1、run2或run3,具体取决于脚本中变量的值。例如,如果param.f90中有以下内容:

character(len=1), parameter :: case_num = "1"
然后,我希望将目标变量设置为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脚本中是否正确。如何在Fortran Makefile中执行此操作?非常感谢您的帮助。

您的makefile显示为GNU makefile。分配输出 shell命令来生成变量,您需要使用, 比如:


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