我有一个可以通过下面的Makefile中编译的Fortran代码:
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命令的输出分配给make变量,你需要使用$(shell ...)
function,如:
num := $(shell grep 'case_num = "' param.f90 | sed -n -e 's/^.*case_num = "//p' | cut -c1-1)
TARGET := run$(num)