我正在写一个Makefile,里面有很多重复的东西,例如
debug_ifort_Linux:
if [ $(UNAME) = Linux ]; then \
$(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="..." \
TARGET=$@ LEXT="ifort_$(UNAME)" -e syst; \
else \
echo $(err_arch); \
exit 1; \
fi
在定义目标'syst‘的地方,定义了变量’are‘(通常是Linux,但也可以是Cygwin或OSF1),还定义了变量'difort’和'err_arch‘。这段代码被多次用于不同的编译器目标(使用‘’的命名约定)。由于这是大量的冗余代码,我希望能够以一种更简单的方式编写它。例如,我想做这样的事情:
debug_ifort_Linux:
compile(uname,compiler,flags,petsc_flags,target,lext)
其中,compile可以是基于参数执行上述代码的函数。有人知道我是怎么做到这一点的吗?
发布于 2009-02-03 15:59:59
你要找的是call
function。
compile = \
if [ $(UNAME) = $(1) ]; then \
$(MAKE) FC=$(2) FFLAGS=$(3) PETSC_FFLAGS="..." \
TARGET=$@ LEXT="$(4)_$(UNAME)" -e syst; \
else \
echo $(err_arch); \
exit 1; \
fi
debug_ifort_Linux:
$(call compile,Linux,ifort,$(difort),ifort)
不过,如果你能稍微调整一下你的Makefile
,你应该看看能不能用make
的conditionals代替sh
的。
https://stackoverflow.com/questions/507641
复制相似问题