grep和在Fortran的Makefile的sed

问题描述 投票:1回答:1

我有一个可以通过下面的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?任何帮助表示赞赏。

bash makefile fortran fortran90
1个回答
2
投票

你的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)
© www.soinside.com 2019 - 2024. All rights reserved.