메이크파일을 분할하고 별도의 파일에서 대상 가져오기

메이크파일 시작



일부 작업이 Makefile로 관리되는 프로젝트의 시작을 상상해 보십시오. 프로젝트 초기에는 작업이 2~3개일 수 있습니다. 다음 몇 줄과 유사한 Makefile을 상상해 보십시오.

install:
    @echo "some install stuff"
build:
    @echo "some build stuff"


기능 추가



그런 다음 프로젝트가 성장하고 작업 수도 증가한다고 상상해보십시오. 테스트를 실행하기 위한 몇 가지 작업. 데이터베이스에 고정물을 삭제, 초기화, 생성, 마이그레이션 또는 추가하는 다른 것. 등등 ...

install:
    @echo "some stuff"
build:
    @echo "some other stuff"
test:
    @echo "some unit test"
e2e:
    @echo "some end 2 end stuff"
fixtures:
    @echo "fixtures"
init-db:
    @echo "database, ..."
erase:
    @echo "clear cache, containers and other stuffs"
some-docker-task:
    @echo "do something"
some-other-task:
    @echo "leave a comment"
some-other-task:
    @echo "please click on Hear or Unicorn"


내 말은, ... 메이크파일을 깨끗하고 읽기 쉽게 유지하거나 시도하기 위해 아무 조치도 취하지 않으면 메이크파일이 곧 폭발할 수 있다는 것입니다. .. 건초! 메이크파일을 분할할 수 있습니까? 음 아니, .. 올바른 질문입니다.

다른 소스에서 명령을 가져올 수 있습니까?



예! 그리고 사용할 키워드는 "include"입니다. 좋아요, .. 기사의 나머지 부분에서 저를 따라오세요. 일부 작업을 다른 세트로 분할해 보세요. 예를 들어 다음 작업 집합을 가질 수 있습니다.
  • 테스트
  • 유닛
  • e2e
  • 기능성

  • 도커 물건
  • 빌드
  • 정지


  • 가상 파일은 다음과 유사할 수 있습니다.

    tests-unit:
        echo @"do something"
    test-e2e:
        echo @"do something"
    test-functional:
        echo @"do something"
    docker-build:
        echo @"do something"
    docker-up:
        echo @"do something"
    docker-stop:
        echo @"do something"
    


    좋아, 이것은 그렇게 크지는 않지만 수십 개의 세트를 상상해보십시오. makefile에 실제로 포함될 수 있습니다. 수백 줄의 makefile을 상상해 보십시오. 나는 읽기가 그렇게 쉬울 수 없다고 확신합니다.

    하나의 Makefile 분할



    이제 test.filedocker.file 두 파일을 상상해 보십시오.
    docker.file 다음을 포함할 수 있음

    docker-build:
        echo @"do something"
    docker-up:
        echo @"do something"
    docker-stop:
        echo @"do something"
    


    test.file 포함할 수 있음

    tests-unit:
        echo @"do something"
    test-e2e:
        echo @"do something"
    test-functional:
        echo @"do something"
    


    메인 Makefile 내부에 포함한다고 상상해 보십시오.

    include test.file docker.file
    


    이제 간단하게 실행할 수 있으며make test-unit 작동합니다. 하지만

    자동 완성 실패



    모든 대상이 Makefile 안에 있을 때마다 자동 완성이 작동합니다. 대상을 외부로 이동하면 작동이 중지됩니다. Makefile 문제는 아니지만 자동 완성 문제입니다. oh-my-zsh를 사용하고 있습니다. 플러그인이 필요할 수도 있습니다. 모르겠어요. 이 문제를 해결하는 방법을 알고 계셨습니까?

    자동 완성 수정



    자동 완성을 수정하는 약간의 트릭을 찾았습니다. 가져온 파일 내에서 대상을 호출하는 새 대상으로 Makefile을 업데이트했습니다. 작동합니다!!! 이제 make<tab>unit-test도 보여줍니다.

    include test.file docker.file
    
    unit-test: test-unit
    


    결론



    makefile을 순서대로 유지하고 깨끗하게 유지하는 것이 좋습니다. 그러나 잃어버린 자동 완성은 그리 좋지 않습니다. 당신이 모든 목표를 알고 있다면 괜찮습니다. 그러나 자동 완성 기능이 없으면 새로운 팀원이 포함된 파일에서 올바른 명령을 찾기 어려울 수 있습니다. 하지만 ... 이것은 고칠 수 있습니다. 그래서... 저는 메이크파일의 이 멋진 기능에 만족합니다.

    좋은 웹페이지 즐겨찾기