이 튜토리얼을 살펴보면 다음과 같은 내용이 있습니다.
# File names
EXEC = run
SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)
.....
%.o: $(SRCPATH)/%.cpp $(INC)
$(CC) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
나는 문서를 이해하고 있는지 확실하지 않으며 누군가가 마지막 두 진술을 설명 할 수 있다면 감사하겠습니다. Makefile에 대한 세 가지 질문이 있습니다.
질문 1 :
차이점은 무엇입니까
SOURCES = $(wildcard *.cpp)
과
SOURCES = $(*.cpp)
두 번째 경우는 .cpp 파일이 존재하지 않는 경우에만 작동하므로 작동하지 않는다고 말합니다. 내 질문은 왜 첫 번째가 작동합니까?
질문 2 : 무슨 'wildcard *'
뜻입니까? 마지막 진술 OBJECTS = $(SOURCES:.cpp=.o)
은 무엇을 의미합니까?
질문 3 : % .o가 대상으로 배치되면 무엇을 의미합니까? *.o
, %.o
및 의 차이점은 무엇입니까?wildcard *.cpp
SOURCES = $(*.cpp)
SOURCES = *.cpp
SOURCES = $(wildcard *.cpp)
첫 번째는 오류이고 두 번째는 너무 늦게 확장되고 (정의가 아님) 세 번째는 소스 디렉토리에서 접미사가 .cpp 인 모든 파일을 검색합니다.
내장 함수 wildcard
는 자연스럽게 발생하지 않는 와일드 카드 확장을 강제하는 데 사용됩니다.
OBJECTS = $(SOURCES:.cpp=.o)
즉 , 항목의 끝에있는 every 를로 대체 한 후의 OBJECTS
값이 할당 됩니다 .SOURCES
.cpp
.o
그리고 %.o
목표는 .o
다른 것에서 s 를 만들기위한 규칙을 정의한다는 것을 의미합니다 .
참고 문헌 : GNU make manual
좋은 기본 메이크 파일은 여기를 참조하십시오 : https://stackoverflow.com/a/26579143
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다