当前位置:  技术问答>linux和unix

Makefile 循环中赋值问题

    来源: 互联网  发布时间:2016-06-13

    本文导语:  有下面的makefile,循环中赋值有问题 LOCAL_INC:include SUBDIRS := cmm api cli ctr lic CURRDIR := CURRFB  := PRJINC  := $(CURRDIR)/$(LOCAL_INC) LINKPATH:= $(CURRFB) $(PRJINC) LOOPCNT := 1 ALLCNT  := $(words $(SUBDIRS)) linkmd:linkpre         whi...

有下面的makefile,循环中赋值有问题


LOCAL_INC:include
SUBDIRS := cmm api cli ctr lic
CURRDIR :=
CURRFB  :=
PRJINC  := $(CURRDIR)/$(LOCAL_INC)
LINKPATH:= $(CURRFB) $(PRJINC)

LOOPCNT := 1
ALLCNT  := $(words $(SUBDIRS))

linkmd:linkpre
        while [ $(LOOPCNT) -le $(ALLCNT) ]; do 
          CURRFB = $(word $(LOOPCNT), $(SUBDIRS)) ;  
          CURRFB += $(CURRDIR)/$(CURRFB)/$(LOCAL_INC)/*.H
          @echo linking files...
          -ln $(LINKPATH)
         LOOPCNT=`expr $(LOOPCNT) + $n`
        done

linkpre:
CURRDIR=$(shell pwd)
.PHONY: linkmd linkpre


循环中CURRFB LOOPCNT无法取得变量的数值,求教应如何修改

|
[code=BatchFile]
SUBDIRS := cmm api cli ctr lic 
LOOPCNT := 1
ALLCNT  := $(words $(SUBDIRS))

all:
        @loopcnt=$(LOOPCNT); 
                while [ $${loopcnt} -le $(ALLCNT) ]; do 
                        echo "loopcnt: $${loopcnt}"; 
                        loopcnt=`expr $${loopcnt} + 1`; 
                done; 
                LOOPCNT=$${loopcnt}; 
                echo '$$$${LOOPCNT}: ' "$${LOOPCNT}"; 
                echo '$${LOOPCNT}: ' "${LOOPCNT}"; 
                echo '$$(LOOPCNT): ' "$(LOOPCNT)"
# 输出为:
# loopcnt: 1
# loopcnt: 2
# loopcnt: 3
# loopcnt: 4
# loopcnt: 5
# $${LOOPCNT}:  6
# ${LOOPCNT}:  1
# $(LOOPCNT):  1
[/code]
从结果分析:
Makefile里的变量比如LOOPCNT在开始处理target之后,是不会被赋值的。
因为LOOPCNT=$${loopcnt}这类语句是给shell变量赋值。
看了下面的例子一定,大家都会觉得很糊涂。
[code=BatchFile]
SUBDIRS := cmm api cli ctr lic 
LOOPCNT := 1
ALLCNT  := $(words $(SUBDIRS))

all:
        @LOOPCNT=$(LOOPCNT); 
                while [ $${LOOPCNT} -le $(ALLCNT) ]; do 
                        echo "LOOPCNT: $${LOOPCNT}"; 
                        LOOPCNT=`expr $${LOOPCNT} + 1`; 
                done; 
                LOOPCNT=$${LOOPCNT}; 
                echo '$$$${LOOPCNT}: ' "$${LOOPCNT}"; 
                echo '$${LOOPCNT}: ' "${LOOPCNT}"; 
                echo '$$(LOOPCNT): ' "$(LOOPCNT)"
[/code]

再看看下面的例子,大家应该什么都明白了
[code=BatchFile]
FOO     = FOO_000

all:
        FOO=FOO_001
        echo $(FOO)

        FOO=FOO_002; 
                echo $(FOO)

        FOO=FOO_003; 
                echo $${FOO}

        FOO=FOO_004
        echo $(FOO)
        echo $${FOO}
[/code]

|
你试试 

LOOPCNT=$(($(LOOPCNT)) + ($n))

我现在没有 linux 环境,试不了。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • makefile如何调用文件目录下的makefile
  • 请教根据Makefile.am自动生成Makefile的问题
  • 怎麼樣使Makefile.in生成Makefile?
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3