Fortran Makefile 中的 grep 和 sed

grep and sed in a Fortran Makefile

我有一个 Fortran 代码,可以通过以下 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 中,这不起作用。我检查了常规 bash 脚本中的 grep 和 sed 语句是否正确。如何在 Fortran Makefile 中执行此操作?感谢任何帮助。

您的 makefile 显示为 GNU Make makefile。分配a的输出 shell命令生成一个变量,需要用到$(shell ...) function, 喜欢:

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