문제

나는 내가 일하고있는 작은 프로젝트를 위해 Gnumake를 배우려고 노력하고 있습니다. 지금까지 "기본"자습서조차도 꽤 거칠어 보이며 아직 Makefile 구문을 이해하지 못했습니다.

절대 초보자가 Gnumake에 익숙해지기 위해 좋은 자원이 있습니까?

도움이 되었습니까?

해결책

결정적인 가이드는입니다 http://www.gnu.org/software/make/manual/make.html
더 많은 설명이있는 O'Reilly 책 "GNU Make와 함께 프로젝트 관리"가 있습니다. 또한 이전 판을 사용할 수 있으며 Gnumake를 구체적으로 다루지 않지만 훨씬 얇습니다.

Make는 개발자들 사이의 더러운 비밀입니다. 우리 중 누구도 그것을 이해하지 못합니다. 우리는 단지 다른 사람의 대본을 빌려서 변경합니다. 나는 단 하나의 스크립트만이 처음부터 작성된 것으로 생각됩니다 (아마도 도구 제작자에 의해).

간단한 예보다 더 많은 일을 해야하는 경우 대부분의 사람들은 개미와 같은보다 현대적인 빌드 시스템으로 전환하거나 Perl/Python 등으로 자신의 것을 굴립니다.

다른 팁

가장 일반적으로 사용되는 Make 기능은 몇 가지 간단한 개념, 대상, 종속성 및 변수로 나눌 수 있습니다.

대상은 구축하려는 것들이지만 대상 아래의 명령은 컴파일러 명령 또는 스크립트 일 수 있습니다. 일반적으로 각 대상은 코드의 모듈을 말하지만 프로젝트에 적합한 것처럼 세분화 할 수 있습니다.

종속성은 프로젝트의 파일 또는 기타 대상입니다. 이것의 가장 좋은 예는 많은 객체 파일에서 바이너리를 구축하는 C 프로젝트입니다. 이진을 빌드하기 전에 각 객체 파일이 존재해야하므로 모든 종속성이 완료 될 때까지 대상을 통과 한 다음 전체 대상에 대한 명령을 실행합니다.

변수는 항상 필요하지는 않지만 컴파일러 플래그와 같은 것을 처리하는 데 매우 편리합니다. 표준 예제는 CC 및 CCFLAG이며, IE GCC를 사용하는 컴파일러와 -ANSI -Wall -O2와 같은 플래그를 나타냅니다.

몇 가지 일반적인 팁과 요령 :

  • 명령 ~ 해야 하다 탭] 캐릭터에 의해 진행되거나 실행되지 않습니다. 이것은 단지 오래된 유물입니다. 왜 이것이 왜 그런지 기억하지 않습니다.
  • 컨벤션별로, 모든 대상을 포함하여 기본값을 기본값이어야하는 기본값을 지정할 수 있습니다. 이것은 복잡한 makefile을 가지고 있고 항상 기본값이되고 싶은 특정 대상이 있습니다.
  • makefile은 makefile 또는 makefile이라고 불러야하지만 다른 것을 호출하려면 $ make -f [makefilename]을 사용하십시오.
  • 항상 전체 변수 확장 구문 IE $ (변수)를 사용하거나 원하는 명령을 출력하지 않을 수 있습니다.
  • Make는 재귀 적으로 작동 할 수 있으므로 디렉토리 내부에 사는 프로젝트에 많은 하위 모듈이있는 경우 Make Into Make의 하위 디렉토리 MakeFile에서 Make를 호출하여 각 구축 할 수 있습니다.
  • 설치 스크립트 등이 필요한 정말 복잡한 프로젝트가있는 경우 아마도 메이크 파일을 생성하는 자동 툴을 조사하고 라이브러리 존재 및 기타 휴대 성 문제를 확인하기 위해 많은 트릭을 수행 할 것입니다.

"GNU Make를 사용한 프로젝트 관리, 3 판"은 "GNU 무료 문서 라이센스"에 따라 제출되며 무료로 온라인으로 법적으로 읽을 수 있습니다. 링크.

나는 O'Reilly 책 제안에 동의합니다.

몇 가지 유용한 팁, 요령 및 통찰력을 위해 Mr. 기사를 만드십시오

MGB : 그렇게 나쁘다. 한 번은 처음부터 복잡한 메이크 시스템 (수천 파일, 50 개 또는 100 개의 디렉토리, 4 ~ 5 개의 컴파일러 및 교차 컴파일 대상, 2 OS 등)을 작성했습니다. 나는 앉아서 GNU가 먼저 안팎으로 제작을 배웠고, 시스템을 디자인하고, 먼저 프로토 타입으로 연주했습니다. 우리는 결과에 매우 만족했습니다.

그러나 그것은 몇 년 전이었습니다. 오늘 내가 어떻게 쓰는지 알아? 당신이 묘사하는 것과 같은 방식. 그것은 충분히 충분하고 구문 세부 사항이 상당히 정기적으로하지 않는 한 세부 사항을 기억할 수 없다는 것보다 충분히 모호합니다. 직관적이지 않은 구문과 기발한 규칙을 가진 다른 언어와 마찬가지로, 나는 생각합니다.

나는 GNU 정보 시스템의 팬이 아니지만 GNU Make Info Pages가 매우 유용하다는 것을 알았습니다. 매우 기본적인 개념과 대략 어떤 종류의 사용 가능한지 알게되면 정보 페이지가 예를 들어 사전 빌드 기능과 같은 정보를 참조하는 가장 빠른 방법이라는 것을 알았습니다.

(GNU를 잊어 버리십시오 info 프로그램 및 예를 들어 사용하십시오 pinfo 대신에.)

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