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)
我有一个 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)