간단한 makefile 이해

간단한 makefile 이해
.PHONY:hello
hello:c_mem.c
    cc  c_mem.c -o c_mem

make 명령은 c_mem 파일을 생성합니다.

.PHONY:hello
hello:c_mem.c
    cc  c_mem.c

make 명령은 a.out 파일을 생성합니다.


이 모든 것이 나에게는 이해가 되는 것 같습니다. 그러나 매뉴얼에 따르면:https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html

대상은 일반적으로 프로그램에서 생성된 파일의 이름입니다. 대상의 예로는 실행 파일 또는 개체 파일이 있습니다. 대상은 "clean"과 같이 수행할 작업의 이름일 수도 있습니다(거짓 대상 참조).

전제조건은 대상을 생성하기 위한 입력으로 사용되는 파일입니다. 대상은 종종 여러 파일에 의존합니다.

가짜:https://stackoverflow.com/questions/2145590/what-is-the-Purpose-of-phony-in-a-makefile 그래서 잘 모르겠어요

.PHONY:hello
hello:c_mem.c
    cc  c_mem.c -o c_mem

이것:안녕하세요그리고안녕하세요:의미는?


메이크파일을 다음과 같이 해석할 수 있습니다.

전체 프로젝트 이름은 다음과 같이 별칭이 지정됩니다.안녕하세요, hello 파일 c_mem.c에서 다음 명령을 실행합니다.

cc  c_mem.c -o c_mem

답변1

Makefile은 다음과 같이 설명됩니다.

target: <dependencies>
  commands to produce target
  • 콜론은 :항상 대상에 속합니다.
  • 대상을 빌드할 때 모든 종속성(파일 날짜)이 확인되므로 필요한 모든 종속성이 자동으로 업데이트됩니다.필요하다면.
  • 종속성(대상보다 최신)을 다시 빌드한 후 나열된 명령을 실행합니다.

귀하가 제공한 링크 아래 기사에 명시된 바와 같이:

PHONY targets are not associated with (output) files

make clean따라서 파일 날짜(예 : :) 에 관계없이 필요할 때 항상 타겟을 빌드할 수 있습니다.

.PHONY: clean
clean:
   rm -rf build/*

을 사용하는 것이 좋습니다. CMake생성기이지만 Makefiles구문론적으로 이해하기가 더 쉽습니다. Makefiles상당히 혼란스러울 수 있습니다.

관련 정보