首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Makefile中的函数

Makefile中的函数
EN

Stack Overflow用户
提问于 2009-02-03 15:47:53
回答 1查看 34.9K关注 0票数 52

我正在写一个Makefile,里面有很多重复的东西,例如

代码语言:javascript
复制
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‘。这段代码被多次用于不同的编译器目标(使用‘’的命名约定)。由于这是大量的冗余代码,我希望能够以一种更简单的方式编写它。例如,我想做这样的事情:

代码语言:javascript
复制
debug_ifort_Linux:
        compile(uname,compiler,flags,petsc_flags,target,lext)

其中,compile可以是基于参数执行上述代码的函数。有人知道我是怎么做到这一点的吗?

EN

回答 1

Stack Overflow用户

发布于 2009-02-03 15:59:59

你要找的是call function

代码语言:javascript
复制
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,你应该看看能不能用makeconditionals代替sh的。

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/507641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档