2011-08-16 3 views
0

특정 값을 선택

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10 
START = 0 

for prefix in $(LIST); do \ 
    if $(input) == $(prefix) then 
     START = 1 
    endif \ 
    if $(START) == 1 then \ 
     if [ -f $(prefix)<file_name> ]; then <do_A>; else <do_B>; fi 
    endif \ 
done 

언급 않다면 내 문제는 두 사람과 함께하다 위. 나는 그것을 반복하는 동안 목록에서 특정 문자열 값을 선택할 수 있습니다 ($ (입력) == $ (접두사) 다음) 및 값을 1 또는 0인지 확인하는 방법을 모르겠어요. $ (START) == 1이면).

이 코드의 목적은 파일 이름은 같지만 접두사가 다른 여러 디렉토리에 동일한 makefile을 사용하는 것입니다. 때로는 디렉토리가 서로 다른 접두어를 가진 파일의 여러 버전을 포함 할 수 있으며 이러한 접두어의 계층 구조를 정의하고자합니다 (본 예에서는 LIST로 정의 됨). 사용자가 버전을 제공 할 때 아이디어는 그가 제공하는 버전부터 시작하여 최신 버전 검색을 시작하는 것입니다 (예 : 사용자가 pre4를 제공하면 먼저 pre4를 검색해야하며 존재하지 않으면 - i 계속해서 pre5를 검색 할 것이지만,이 예에서는 현재 디렉토리에 존재하더라도 pre1을 검색하지 않을 것입니다.

누구나 어떻게 할 수 있습니까?

미리 감사드립니다. 그는 메이크의 명령 있어야하는 경우

+0

이것은 약간 분명하지 않습니다. pre4 *가 존재하면 프로세스가 pre5, pre6 ...으로 계속 진행해야합니까? – Beta

+0

글쎄, 그 생각은 계속되지 않을거야. 하지만 이건 내 문제가 아니야. 나는 그걸로 처리하는 방법을 알고 있다고 생각합니다 (에서 START를 다시 0으로 설정) – user897621

+0

그래서 ...해야 할 일은 B라고해야합니까? – Beta

답변

3

, 구문은 다음과 같이 될 것이다 :

LIST = pre1 pre2 pre3 pre4 pre5 pre6 pre7 pre8 pre9 pre10 
START = 0 
input = somename 
file_name = whatever 

some_target: 
    for prefix in $(LIST); do \ 
     if test "$(input)" = $$prefix; then \ 
      START=1; \ 
     fi; \ 
     if test "$(START)" = 1; then \ 
      if test -f $$prefix$(file_name); then \ 
       <do_A>; \ 
      else \ 
       <do_B>; \ 
      fi; \ 
     fi; \ 
    done 

하지만 당신은 < 입력 > 및 <FILE_NAME>가되어있는 것을 우리에게 이야기하지 않았다 그렇기 때문에 나는 다른 변수로 가정했다. make. 기본적으로 make 규칙은 하나의 긴 셸 줄처럼 보이며 명령은 세미콜론으로 구분되며 줄은 백 슬래시로 계속됩니다. $$는 make으로 바뀝니다. 이는 쉘 변수 ($$ 접두어)에 대한 참조가 2 달러가 필요한 이유입니다.

make 설명서 (전체 내용은 man make입니다. 읽고 이해하는 것이 즐겁습니다.) 오늘 make 전문가가 되십시오! make 변수와 변수의 차이점을 이해해야합니다.

관련 문제