2012-09-05 9 views
0

이 Makefile로 Java 코드를 컴파일하려고합니다. 내가 make를 실행할 때, 코드를 두 번 이상 컴파일합니다.Makefile을 두 번 이상 실행하십시오.

메이크 :

.PHONY: all clean run 

SOURCES = \ 
    Models/CustomException \ 
    Models/Forest \ 
    Models/ForestContainer \ 
    Models/Owner \ 
    Models/OwnerContainer \ 
    Models/Tree 


SRC = $(addprefix src/, $(addsuffix .java, $(SOURCES))) 
BIN = $(addprefix bin/, $(addsuffix .class, $(SOURCES))) 

all: ${BIN} 

clean: 
    -rm -f ${BIN}; 

${BIN}: ${SRC} 
    mkdir -p bin/Controllers; 
    mkdir -p bin/Models; 
    mkdir -p bin/Views; 
    javac -d bin ${SRC}; 

run: all 
    java -cp bin Program; 

출력 :

┌─(klim) - (~/workspace/Forest-mvc) 
└─> make 

mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 
mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 
mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 
mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 
mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 
mkdir -p bin/Controllers; 
mkdir -p bin/Models; 
mkdir -p bin/Views; 
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java; 

당신이 실제로, 6 번을 한 번 이상 명령을 더 실행 볼 수 있듯이. SOURCES 수가 추가/제거 될 때 명령을 증가/감소시키는 횟수

어떻게 될 수 있습니까?

답변

1

javac 뒤에 주 클래스를 추가하기 만하면됩니다.

${BIN}: ${SRC} 
    javac -d bin -cp . Models/Tree.java 

기본 클래스에 의존하는 모든 클래스와 폴더 (패키지)가 자동으로 컴파일됩니다. 당신의 make는 이미 컴파일 된 클래스들을 반복해서 컴파일하고있다.

0

Makefile의 첫 번째 타겟은 all이며, 6 개의 다른 하위 타겟에 따라 다릅니다. 아마, 시작의 초반에는 이들 중 어느 것도 존재하지 않으므로 make은 6 개의 하위 타겟을 각각 구축해야한다고 생각합니다. 그러나 이들 하위 타겟 중 하나를 빌드하면 실제로 정의한대로 6 개 모두 빌드되지만, make은이를 알지 못합니다.

결론은 말한대로하는 것입니다. 당신이 말한 것이 여분이라는 사실은 make에게 중요하지 않습니다.

0

각 대상 int $ {BIN} make는 $ {BIN} : $ {SRC} 규칙을 호출하지만 명령 줄에서 javac에 대한 모든 소스를 제공합니다. javac 라인에서 $ {SRC}를 $ <으로 대체하려고합니다.

관련 문제