...
.
아래의 Makefile은 소스가 ./src 아래에 있다고 가정하고 중개 파일을 위해 ./build를 사용하기 때문에 (깨끗한 대상에 의해 완전히 제거되므로 조심해야합니다).
그런 다음 'make'또는 'make jar'가 jar 파일을 생성해야합니다.
NAME=MyProject
MAIN_CLASS=MyMainClass
SRC_DIR=./src
CLS_DIR=./build/classes
MANIFEST_FILE=./build/META-INF.MF
JAR_FILE=./$(NAME).jar
SRC_FILES=$(shell find $(SRC_DIR) -iname "*.java")
CLS_FILES=$(patsubst $(SRC_DIR)/%,$(CLS_DIR)/%,$(patsubst %.java,%.class,$(SRC_FILES)))
.PHONY: jar run clean mrproper
jar : $(JAR_FILE)
run : $(JAR_FILE)
java -jar $(JAR_FILE)
$(JAR_FILE) : $(MANIFEST_FILE) $(CLS_FILES)
jar cmf $< [email protected] $(CLS_DIR)
$(MANIFEST_FILE) :
mkdir -p $(dir [email protected])
echo Main-Class: $(MAIN_CLASS) > [email protected]
$(CLS_DIR) :
mkdir -p $(CLS_DIR)
$(CLS_DIR)/%.class : $(SRC_DIR)/%.java $(CLS_DIR)
javac -d $(CLS_DIR) -sourcepath $(SRC_DIR) $<
clean :
rm -Rf ./build
mrproper : clean
rm -f $(JAR_FILE)
은 소스 파일의 목록을 얻으려면 찾기 작업을 수행하면 확인 실행할 때마다, 그 얼마나 많은 파일과 얼마나 빨리 파일 시스템은에 따라 약간의 지연이 발생할 수 있습니다 ....하지만 당신은 말했다 is는 작은 프로젝트이므로 문제가되지 않아야합니다.
이중 patsubst는 단 하나로 압축 될 수도 있지만 두 단계로 수행됩니다.
또한이 솔루션은 각 Java 클래스를 개별적으로 컴파일합니다. 이것은 꽤 비쌀 수 있으며 모든 src java 파일의 이름을 포함하는 파일을 만들어 javac에 전달함으로써 이상적으로 모든 것을 한 번에 컴파일 할 다른 대상을 갖는 것이 좋습니다.
[this] (http://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html)를 찾고 계십니까? – Smit
나는 그 질문이 모호하다고 생각한다. 너 무슨 짓을 한거야? –
_make_가되어야합니까? [ant] (http://ant.apache.org/)를 사용할 수 있습니까? –