모듈을 작성하려면 어떤 프레임워크를 사용해야 합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/73889

  •  09-06-2019
  •  | 
  •  

문제

모듈 작성을 위한 가장 좋은 프레임워크는 무엇입니까? ExtUtils::MakeMaker (h2xs) 또는 모듈::빌드?

도움이 되었습니까?

해결책

메모 이 조언은 오래되었습니다. 모듈::Perl 코어에서 빌드가 제거되었습니다. 하지만 CPAN 모듈로 계속 살아있습니다.장점과 단점은 여전히 ​​유효하며, MakeMaker에 대한 나의 의견도 여전히 유효합니다.


ExtUtils::MakeMaker의 전 관리자로서 저는 MakeMaker가 공포 쇼이기 때문에 Module::Build를 추천하고 싶습니다.모듈::빌드를 함께 사용하면 훨씬 더 좋습니다.그러나 그것은 귀하의 관심사가 아니며 "귀하에게 가장 번거롭지 않은" 답변을 제시하겠습니다.

요약:

Module::Build 지원은 Perl 전체에서 100% 지원되지 않으므로 MakeMaker부터 시작하세요.사용자 정의를 수행하려면 Module::Build로 전환하세요.기본 레이아웃, 옵션 및 인터페이스가 거의 동일하므로 어렵지 않습니다.보기에는 매력적이지만 Module::Install은 피하세요.

다행히 Module::Build는 MakeMaker를 에뮬레이트할 수 있어 일부 도움이 되지만 사용자 정의를 수행하려는 경우에는 도움이 되지 않습니다.보다 모듈::빌드::호환.

CPAN 릴리스의 경우 Module::Build를 사용하는 것이 좋습니다.이제 CPAN에는 모듈::빌드 항목이 충분하므로 모두가 이미 부트스트랩을 처리했습니다.

마지막으로, 새로운 configure_requires 옵션을 사용하면 CPAN 쉘이 모듈 빌드를 시작하기 전에 Module::Build를 설치해야 함을 알 수 있습니다.불행하게도 최신 CPAN 쉘만이 구성_요구사항에 대해 알고 있습니다.

아, 무엇을 하든 h2xs를 사용하지 마세요(XS 코드를 작성하지 않는 이상...그런 다음 생각해 보세요).

MakeMaker의 장점:

  • Perl과 함께 제공되며 Perl 코어에서 사용됩니다 (따라서 유지되고 영원히 유지될 것입니다)
  • Makefile.PL로 무엇을 해야 할지 모두가 알고 있습니다.
  • 대부분의 모듈 작성 문서에는 MakeMaker가 포함됩니다.
  • make 사용 (make 를 아는 사람은 빌드를 디버깅하고 패치 할 수 있습니다. 프로세스)

MakeMaker 단점:

  • make가 필요합니다(Windows를 생각해 보세요).
  • 맞춤화가 어렵다
  • 사용자 정의하고 크로스 플랫폼을 만드는 것이 더욱 어렵습니다.
  • 뭔가 잘못되었을 때 디버깅하기 어려움(make를 이해하지 않는 한)

모듈::빌드 전문가:

  • 더 쉽게 사용자 정의/하위 클래스화
  • 순수 펄
  • 디버깅이 더 쉽습니다(Perl입니다).
  • 여러 가지 방법으로 MakeMaker를 에뮬레이트할 수 있습니다.
  • CPAN 쉘은 Module::Build를 설치합니다.

모듈::빌드 단점:

  • Module::Build 유지관리자(그리고 실제로 모든 Perl Toolchain Gang)는 그것을 싫어합니다.
  • 이전 버전의 CPAN 클라이언트(CPANPLUS 포함)는 Module::Build에 대해 아무것도 모릅니다.

모듈::설치 장점:

  • 매끄러운 인터페이스
  • 번들 자체에는 알려진 버전이 있습니다.
  • Makefile.PL을 다루는 방법은 모두가 알고 있습니다.

모듈::설치 단점:

  • 만들기가 필요합니다
  • 항상 번들 버전 사용, 외부 파손에 취약
  • 인터페이스 외부에서는 사용자 정의가 어렵습니다.
  • MakeMaker의 내장을 망쳐놓기 때문에 새로운 MakeMaker 릴리스에서는 결국 이를 깨뜨릴 것입니다.
  • v2 메타 스펙을 사용하여 META 파일을 생성하는 방법을 모릅니다. (최신 도구에서 점점 더 문제가 되고 있음)

다른 팁

여기에는 두 가지 질문이 있습니다.

첫째, h2xs를 사용하지 마십시오.오래되고 구식이지만 실제로 헤더 파일을 XS 코드로 변환하려는 경우 유용할 수 있습니다(직접 수행한 적은 없습니다).

2011년 업데이트:꼭 한번 살펴보시길 권해드립니다 거리::질라, 특히 둘 이상의 모듈을 유지 관리할 것이라고 생각하는 경우 더욱 그렇습니다.

새 모듈을 만들려면 Module::Starter를 사용하세요.훌륭하게 작동하며 출력을 사용자 정의하기 위한 멋진 플러그인도 있습니다.

둘째, 어떤 빌드 시스템을 사용해야 하는지 묻고 있습니다.세 가지 경쟁자는 ExtUtils::MakeMaker(EUMM), Module::Build(MB) 및 Module::Install(MI)입니다.

EUMM은 끔찍하고 불쾌한 작업이지만 작동하며 빌드 프로세스를 전혀 사용자 정의하지 않는 경우에도 잘 작동합니다.

MB는 새로운 아이이고 비방하는 사람들도 있습니다.큰 장점은 설치 및 빌드 프로세스를 크게 사용자 정의하려는 경우 MB를 사용하여 이 작업을 제대로(그리고 크로스 플랫폼 방식으로) 수행하는 것이 가능하다는 것입니다.EUMM을 사용하는 것은 실제로 불가능합니다.

마지막으로 MI는 기본적으로 EUMM 위에 있는 선언적 래퍼입니다.또한 이전 툴체인 모듈을 사용하여 모듈을 설치하려는 사용자의 문제를 해결하기 위해 배포판과 함께 자체적으로 패키지됩니다."패키지 자체" 트릭의 단점은 MI 자체에 버그가 있는 경우 이를 수정하기 위해 모든 모듈을 다시 릴리스해야 한다는 것입니다.

사용자 정의에 관한 한 MI용 플러그인이 몇 가지 있지만 그 이상을 원한다면 Makefile을 처리하고 12개 이상의 플랫폼에 걸쳐 도구를 빌드하는 문제로 돌아가게 되므로 실제로는 도움이 되지 않습니다. 당신은 그 영역에 너무 많이 있습니다.

방금 업로드했어요 배포::밥솥 CPAN에.이것이 제가 새로운 배포판을 만드는 데 사용하는 것입니다.좋은 점은 배포판이 원하는 대로 될 수 있다는 것입니다.당신은 단지 몇 가지 템플릿을 요리하고 있을 뿐입니다.누가 사용하든 상관없어요.나에게 그것은 간단하고 기술 수준이 낮으며 추가 문제를 일으키지 않습니다.

다음과 같은 것으로 시작할 수도 있습니다. 모듈::스타터 시작 템플릿을 만든 다음 자신만의 상용구와 즐겨 사용하는 작업 방식을 추가하세요.각 파일에서 원하는 것을 선택할 수 있을 뿐만 아니라 배포판에 표시할 파일도 선택할 수 있습니다.자신이 좋아하는 작업 방식을 파악한 후 자신의 템플릿을 업데이트하기만 하면 됩니다.

Makemaker 및 Module::Build의 경우, 미래는 Module::Build 입니다.더 이상 Makemaker를 사용하는 것은 우리 노인들뿐입니다.:) 동시에 둘 다 사용하는(또는 둘 다 사용하는 척하는) 방법이 있습니다. Module::Build, Module::Build::Compat 및 Module::Install 문서를 살펴보세요..모듈::빌드는 Perl의 표준 라이브러리에서 제외되었으며 미래는 불확실합니다.빌드 시스템으로 Makemaker로 돌아왔습니다.

이것은 약간의 변명 답변이지만 각각에 대한 약간의 경험을 얻기 위해 각각을 사용해보십시오.

당신은 또한보고 싶을 수도 있습니다 디스트질라 이는 배포판을 생성하는 새로운 작성자 전용 도구입니다.배포판 구축에만 도움이 되기 때문에 코드와 함께 제공되거나 설치가 수행되지 않으며 많은 강력한 작업을 수행할 수 있습니다.

Module::Build와 관련된 호환성의 유일한 문제는 사용자가 CPAN 클라이언트(CPAN.pm 또는 CPANPLUS.pm)를 업데이트하지 않고 모듈을 설치하려고 할 때입니다. CPAN에서 모듈을 설치하는 경우 클라이언트도 쉽게 업그레이드할 수 있습니다. 같은 거울에서.

하고 싶지 않다면 아무것 빌드 프로세스가 복잡합니다.EUMM을 사용하세요.그러나 다른 대상 플랫폼에서 빌드 문제가 있는 경우 make의 모든 변형마다 다른 Makefile이 생성될 수 있습니다.

Module::Build는 많은 기능(확장하면 생각할 수 있는 모든 기능)을 제공하며 모두 Perl이므로 makefile 디버깅을 끝내지 않습니다.Module::Install은 기능을 제공하지만 이를 번들로 묶어야 하며 모든 것이 결국 'make'를 통해 실행됩니다.

또한 Module::Build 및 Module::Starter를 추천합니다( TT2 플러그인).

Module::Build는 어떤 면에서든 더 좋지만 ExtUtils::MakeMaker보다 덜 광범위하게 지원됩니다(더 구체적으로 말하면 이전 버전의 Perl은 기본적으로 이를 지원하지 않습니다).그것은 귀하의 필요에 따라 다릅니다.

개인적으로 저는 Module::Install을 추천합니다. 제가 아는 많은 사람들처럼 Catalyst나 Moose 같은 사람들도 이 도구를 사용합니다.

응답이 취하기를 바라는 방향에 대한 약간의 설명은 다음과 같습니다.

  • 다양한 프레임워크의 장단점
  • 프레임워크의 호환성/설치 기반
  • 내부(로컬) 대 내부(로컬) 적합성외부(CPAN) 릴리스
  • ~ 아니다 베어 "X 사용" 답변

데이브의 답변 좋은 찬반 양론 정보가 있습니다. 레온의 대답 호환성을 암시하지만 명시적이지는 않습니다.처럼 브라이언 D 포이가 언급됨, 오래된 모자만이 EUMM을 사용하지만 MB가 5.9까지 코어의 일부가 아니기 때문에 CPAN을 위한 좋은 프레임워크라고 확신하지 않습니다.

둘 다에는 장단점이 있습니다.요즘에는 Module::Build와 Module::Starter를 사용하고 추천합니다.

EU::MM은 여전히 ​​가장 널리 지원되고 인기 있는 것으로 보이지만 Module::Build가 따라잡고 있습니다.또한 확인해 보세요. 모듈::스타터 시작하는 데 도움이 되는 모듈입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top