이 Makefile은 컴파일러를 지정하지 않고 어떻게 C 프로그램을 생성합니까?

이 Makefile은 컴파일러를 지정하지 않고 어떻게 C 프로그램을 생성합니까?

나는 책에 있는 Makefile을 사용하고 있습니다."고급 Linux 프로그래밍(2001)"[암호]. 이거 보니 이상하네요GNU가 만든다Makefile에서 컴파일러를 지정하지 않고도 코드가 올바르게 컴파일됩니다. 아무런 레시피 없이 굽는 것과 같아요!

다음은 코드의 최소 버전입니다.

test.c

int main(){}

파일 생성

all:            test

그리고 실제로 변화를 만들어보세요! 실행하는 명령은 다음과 같습니다.

cc     test.c   -o test

문서에서 유용한 내용을 찾을 수 없습니다. 어떻게 이럴 수있어?


추신: 추가하자면, 언어가 test.c사용 가능하기 때문에 지정되지도 않았습니다. GNU는 해당 언어 가 존재 하거나 (존재하지 않을 경우 ) 대신에 make이를 사용합니다 .cctest.cpptest.cctest.cg++c++

답변1

활용해보세요기본 제공 규칙. 특히 C 코드를 컴파일하는 방법과 단일 개체 프로그램을 연결하는 방법을 알려줍니다.

실제로 Makefile도 필요하지 않습니다.

make test

하나도 없이 작동합니다.

이를 가능하게 하는 숨겨진 규칙을 보려면 -pMakefile 없이 옵션을 사용하십시오.

make -p -f /dev/null

-r옵션은 이러한 기본 제공 규칙을 비활성화합니다.

지적한대로알레프제로, Make에는 오랫동안 (항상 그런 것은 아니지만) Stuart Feldman이 작성한 Unix V7의 첫 번째 버전에 대한 기본 규칙이 있었습니다.그들을 정의하다files.c, 그리고그의 1979년 논문그들을 언급하십시오. 그들도 마찬가지야POSIX 사양. (이것은 Make의 모든 구현이 이를 지원한다는 의미는 아닙니다. 이전 Borland Make for DOS는 적어도 버전 3.0 이전에는 지원하지 않습니다.)

관련 정보