외부 매개변수 및 내부 변수가 포함된 Makefile 명령

외부 매개변수 및 내부 변수가 포함된 Makefile 명령

Makefile 대상에는 여러 부분으로 분할 x하고 한 부분만 처리 y한 다음 해당 파일 이름을 테스트 실행기에 인수로 전달하려는 파일 목록이 있습니다. CI 시스템에서 제공하는 외부 매개변수를 제어할 수 없습니다. 그래서 수동으로 0부터 시작하도록 해야 합니다. 통화 예:test_group_count=10 test_group=1 make foo

내 비작업 시도는 다음과 같습니다.

foo:
     group_number=$(shell echo $$(( $(test_group) - 1 )))
     tests="$(shell ls *.feature | awk 'NR%$(test_group_count)==${group_number}')"
     run_tests $${tests}
  • -1공장
  • 파일 나열은 작동하지만 y줄로 줄일 수는 없습니다.
  • 파일 이름을 변수에 저장한 후 다음 명령에 사용하면 작동하지 않습니다.

그래서 저는 명령이 이 두 변수, 즉 대상에서 정의한 변수와 호출 명령에 의해 제공된 변수를 확인하도록 만드는 방법을 찾지 못했습니다.

고쳐 쓰다:

한 줄로 작동하도록 할 수도 있지만 실제 명령 run_tests자체는 길고 보기 흉한 명령이기 때문에 좀 더 읽기 쉬운 것을 선호합니다.

run_tests $$(ls *.feature | awk 'NR%$(test_group_count)==( $(test_group) - 1 )')

답변1

귀하의 ${group_number}명령은 해당 이름을 가진 make 매크로로 대체됩니다. 그러나 위의 줄은 이를 쉘 변수로 설정합니다(사용 중인 쉘과 다른 쉘에서 단순히 두 배로 늘리면 작동하지 않습니다 $).

매크로로 정의해야 합니다. 즉, 규칙이 아니라 탭이 아닌 들여쓰기 줄에 정의해야 합니다. 에서도 마찬가지입니다 tests. 각 줄은 서로 다른 셸에서 실행되며 둘 사이에 변수를 공유할 수 없습니다.

작업 솔루션:

foo: group_number=$(shell echo $$(( $(test_group) - 1 )))
foo: tests=$(shell ls *.feature | awk 'NR%$(test_group_count)==${group_number}')
foo:
    run_tests ${tests}

관련 정보