이 Makefile을 실행하면 어떤 일이 일어나는지 설명해 주세요.

이 Makefile을 실행하면 어떤 일이 일어나는지 설명해 주세요.

저는 명령줄을 사용하여 플렉스와 (실제로 처음으로) 배우고 있습니다.

테스트 프로세스를 단순화하기 위해 Makefile을 만들었지만 명령이 왜 반대인지 이해가 되지 않습니다.

예를 들어 터미널의 순서는 다음과 같습니다.

flex test.l

그러면 파일이 생성됩니다.lex.yy.c

그런 다음 다음을 컴파일합니다.

g++ lex.yy.c -ll -o test

Makefile은 거꾸로 읽습니다:

test: lex.yy.c
     g++ lex.yy.c -ll -o test

lex.yy.c: test.l
     flex test.l

그렇다면 내가 달릴 때 정확히 무슨 일이 일어나는가 make?

답변1

Makefile은 다음 형식을 따릅니다. (전부는 아니지만 대부분의 구현에서 요구하기 때문에 Makefile은 항상 공백 대신 탭을 사용해야 합니다 make.)

target: dependencies
    operations to build target
  • 타겟은 빌드/컴파일/생성하려는 대상입니다. 여러 개가 있을 수 있으며 종속성을 먼저 충족해야 하는 경우가 아니면 Makefile 순서로 빌드해야 합니다. 이것첫 번째파일의 대상이 호출됩니다.기본 대상, make인수 없이 호출할 때 빌드하려고 하는 것입니다.
  • 종속성은 대상을 빌드하는 데 필요한 다양한 부분입니다.

이 Makefile에는 두 가지 목표가 있습니다.

  • 시험
  • lex.yy.c

lex.yy.c빌드에 필요한 종속성이므로 처음 test부터 빌드됩니다 test.l. 생성되면 컴파일할 준비가 된 것입니다 test. 기본적으로 make... :

  • 구축해 보세요 test.
  • 해결되지 않은 종속성. lex.yy.c존재하지 않거나 업데이트되었으므로 먼저 빌드해야 합니다.
  • 빌드할 작업을 읽습니다 lex.yy.c. 실행 flex test.l: lex.yy.c구축되었습니다.
  • test모든 종속성이 충족됩니다. 달리기 g++ lex.yy.c -ll -o test.
  • test건설되다.

추가 정보:makefile에 대한 더 많은 정보를 원하시면 제가 추천합니다리눅스 개발 플랫폼통과라피크 울 레만.4장: GNU Make 사용하기.

답변2

먼저 호출을 target 으로 만드세요 test. 그러나 lex.yy.c이는 종속성입니다.

따라서 실제로 실행하기 전에 대상과 모든 종속성을 분석하십시오. 첫 번째 대상은 이지만 test실행을 시작하기 전에 lex.yy.c호출됩니다 .

관련 정보