목표 규칙 내에서 사용하고 있다고 가정합니까? 그리고 규칙의 한 줄에 echo ifeq ($<,bar)
과 같은 값을 표시 했습니까?
이들은 동일한 컨텍스트 (또는 동시에)로 평가되지 않습니다.
메이크 레벨 ifeq
은 make 구문 분석시 평가됩니다 (따라서 $<
에는 값 없음).
에코 셸 줄의 확장 (변수 변경을 위해)은 대상 처리 시간 a (따라서 $<
에 값이 있음)에서 계산됩니다.
대신 @$(if $(filter-out bar,$<),:,echo dfjhsdfhdfklhsdfhj)
을 사용해보세요.
$(filter-out)
은 두 번째 인수에서 첫 번째 인수와 일치하는 단어를 제거합니다 (여기에도 패턴을 허용 함).
$(if)
첫 번째 인수가 비어 있지 않은 문자열로 평가되면 성공합니다.
그래서 우선 $(filter-out)
$<
에서 bar
하고이 비어 있지 않은 문자열로 우리를 떠나면 다음 $(if)
이 케이스 :
(이하 "다만 대가로, 두 번째 인자를 평가 (단지 bar
보다 $<
더 거기에 의미) true "쉘 명령). 빈 문자열을 얻은 경우 $<
은 bar
이고 $(if)
은 세 번째 인수 (이 경우 echo)를 계산합니다.
똑같은 질문에 대해 대답하려고합니다. make가 다른 순서로 평가를한다는 점을 잊어서 평가할 때 make가 동등하지 않습니다. – jgr208
if에 else를 어떻게 추가하나요? – jgr208
그건 이미 다른. 'echo'는 else입니다. ':'는'if' /'true' 블록입니다. 대답에 대한 설명을 추가하겠습니다. –