나는 현재 나는이에 대한 몇 가지 질문이 있지만 작동 다음 메이크 (I 온라인 자습서의 예를 사용하고) 있습니다이해 메이크 더 나은 - .o 만 파일이 경우에 생성됩니다 어떻게
# *****************************************************
# Variables to control Makefile operation
CXX = g++
CXXFLAGS = -Wall -g
test: main.o car.o student.o house.o
$(CXX) $(CXXFLAGS) -o test main.o car.o student.o house.o
objcopy --only-keep-debug test test.debug
main.o: student.h house.h main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
car.o: car.h
student.o: student.h car.h
house.o: house.h
clean:
rm -rf *.o test *.debug
을
여기에 무슨 일이 벌어지고 있는지에 대한 이해는 내가 틀렸다면 나를 교정 해주시기 바랍니다. 처음에는 테스트 대상이 호출되면 첫 번째 종속성을 찾습니다. main.o
이 파일 또는 대상이 될 수 있습니다. main.o
이라는 파일이 없으므로 main.o
을 대상으로 검색합니다. main.o가 타겟으로되면, 종속성은 student.h house.h main.cpp
입니다. 이것들은 파일 make로서 존재하기 때문에, $(CXX) $(CXXFLAGS) -c main.cpp
인 레시피 (커멘드)를 실행하기 때문에 의존성을 찾습니다. 이제 내가 이해하지 못하는 부분이있다. 두 번째 종속성 car.o
이 나오면 make는 car.h를 찾고 찾는다. 그러나 .o 파일을 생성하라는 명령은 없다. 여기서 .o 파일을 생성하는 방법은 무엇입니까?
'make -p'를 실행하여 기본 규칙을 찾습니다. 'make --trace'를 규칙 화하거나 [remake] (http://bashdb.sourceforge.net/remake/)를'remake -x'로 사용하여 무슨 일이 일어나고 있는지 이해하십시오. –
사소한 언급 : 위의 _it은 파일 또는 target_ 일 수 있습니다. 그것이 어떻게 작동하는지는 아닙니다 : 그것은 모든 전제 조건을 목표로 고려합니다. make가 대상을 업데이트하기위한 적용 가능한 규칙을 찾을 수없고 대상 파일이 존재하면 make는 대상을 "빌드 된"것으로 간주하고 계속 진행합니다. 이것이 car.h와 같은 파일을 처리하는 방법입니다. – MadScientist