2014-03-24 2 views
1

메이크 파일에서 벡터의 크기를 얻으려면 어떻게해야합니까? 두 개의 동일한 크기의 벡터의 각 요소를 통과하는 간단한 루프가 필요합니다.메이크 파일에서 벡터 길이를 얻고 for 루프에서 사용하는 방법은 무엇입니까?

루프의 크기 나 벡터의 크기와 관련이 없지만 내가 생각하고있는 아이디어를 제공하는 예제. 루프 표기법은 this에서 찍은 :

V1=one two three four 
V2=bird stones parks bears 
print: 
    size={#$(V1)}  <- this is my invented notation, obviously it doesn't work. 
    i=0 
    while [[ $$i -le $$size ]] ; do \ 
    echo $(V1)[i] $(V2)[i] ; \ 
    ((i = i + 1)) ; \ 
done 

출력 :

one bird 
two stones 
three parks 
four bears 

답변

2

나는이 구조는 메이크에 적합하다 확실하지 않다 있습니다. 모든 루프를 perl 스크립트 안에 넣고 Makefile에서 perl 스크립트를 호출하는 것이 가장 좋을 것이라고 생각합니다. 또한 AFAIK, V1=one two three four 같은 라인이 만들어지지 않습니다

one bird 
two stones 
three parks 
four bears 

를 생성

V=one:bird two:stones three:parks four:bears 
print: 
    @for vv in $(V) ; do echo $${vv} | sed 's/:/ /' ; done 

: 즉, 여기에 내가 모두를 써야했다 만약 내가 + 있도록 리눅스 방식이을 작성하는 방법은 상기 vector. 문자열 "one two three four"을 만듭니다. 루프없이

1

또 다른 변형 : 행동

V1=one two three four 
V2=bird stones parks bears 
print: 
    @echo $(subst -, ,$(join $(V1),$(addprefix -,$(addsuffix :,$(V2))))) | sed 's/:\(\)*/\n/g' 
0
# idea from http://stackoverflow.com/a/1491012/493161 
V1 ?= one two three four 
V2 ?= bird stones parks bears 
COUNT := $(words $(V1)) 
SEQUENCE := $(shell seq 1 $(COUNT)) 
print: 
    $(foreach number, $(SEQUENCE), \ 
    echo $(word $(number), $(V1)) $(word $(number), $(V2));) 

:

[email protected]:/tmp$ make -s -f answer.mk 
one bird 
two stones 
three parks 
four bears 
관련 문제