makefile을 설정하는 방법을 배우고 있으며 문제가 발생했습니다. 이를 증명하기 위해 소스 파일 main.m
과 test.m
으로 구성된 간단한 "프로젝트"를 만들었습니다.Makefile은 항상 파일을 다시 컴파일합니다.
나는 이러한 파일을 (일도가 변경된 경우에만) 컴파일하고 (여기 build/
)을 다른 곳에서 객체 파일을 저장할 수 있도록 설정하려고
내 메이크 :
OBJ = ./build
SOURCES=main.m test.m
OBJECTS=$(addprefix $(OBJ)/,$(SOURCES:.m=.o))
EXECUTABLE=test
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
gcc $(OBJECTS) -o $(EXECUTABLE)
$(OBJECTS): $(OBJ)/%.o: %.m build/
gcc -c $< -o [email protected]
build/:
mkdir build
내가 실행
gcc -c main.m -o build/main.o
gcc -c test.m -o build/test.o
gcc ./build/main.o ./build/test.o -o test
을 그러나 내가를 실행하는 경우 : 그것은 (단지 메이크와 현재 디렉토리에있는 소스) 처음으로 내가 그것을 할 기대하지다시 :
gcc -c main.m -o build/main.o
gcc ./build/main.o ./build/test.o -o test
무엇이 잘못 되었습니까? 또한 "좋은"Makefile을 만드는 법을 배우기 위해 Makefile에있는 다른 오류에 대해서도 언급 할 것입니다.
편집 :
Finished prerequisites of target file `build/main.o'.
Prerequisite `main.m' is older than target `build/main.o'.
Prerequisite `build/' is older than target `build/main.o'.
No need to remake target `build/main.o'.
및
Finished prerequisites of target file `build/test.o'.
Prerequisite `test.m' is older than target `build/test.o'.
Prerequisite `build/' is newer than target `build/test.o'.
Must remake target `build/test.o'.
당신이 단지'/'A의 build' '에 연결하지 않으려는 생각 몇 군데. 내가 여기서 그것을 시도하자. 'make -d'를 사용하여'make '가 무엇을 만들지에 대한 결정을 어떻게 내리는 지 볼 수 있습니다. –
감사합니다. 그러나'make -d' 라우트는 927 줄의 정보를 출력하므로 잠시 시간이 걸릴 것입니다 : – varesa
posisble과 같은 많은 암시적인 규칙을 없앰으로써 조용히 할 수 있습니다. 난 그냥 간단한 테스트 프로젝트와 함께 여기에 귀하의 메이크 파일을 시도하고, 그것은 예상대로 작동하는 것 같았다. 즉, 두 번째 달리기에서, 나는 단지 'make :'all '을 위해 할 일은 아무것도 없다.' –