0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoderで使用するJavaのMakefileテンプレート(Windows)

Last updated at Posted at 2024-09-25

##AtCoderで使用するJavaのMakefileテンプレート(Windows)

Atcoder用なのでデフォルトパッケージです。
環境は、Windows OS
AIでひな形を作成し修正しました。

テストの方法

oj test -c "java.exe -classpath .\release Main" -d ./test

テストの方法は、javaファイルを直接実行する方法もあります。

oj test -c "java.exe Main.java" -d ./test

提出方法

acc submit Main.java -- -l 5005

5005 (Java (OpenJDK 17))
5009 (JavaScript (Node.js 18.16.1))
5010 (JavaScript (Deno 1.35.1))

###Makefile
デバッグビルド用の出力ディレクトリ .\debug
リリースビルド用の出力ディレクトリ .\release
となっています。

# Java用Makefile(Windows環境用)

# コンパイラ
JC = javac.exe
# Java実行環境
JVM = java.exe
# Javaデバッガ
JDB = jdb.exe

# javac コンパイルオプション
DEBUG_FLAGS = -g -encoding utf-8
DEBUG_FLAGS += -Xlint -deprecation -parameters
DEBUG_FLAGS += -verbose
#DEBUG_FLAGS += --enable-preview --source 21

RELEASE_FLAGS = -encoding utf-8
RELEASE_FLAGS += -Xlint -deprecation -parameters
#RELEASE_FLAGS += -verbose
#RELEASE_FLAGS += --enable-preview --source 21

# java 実行時オプション
DEBUG_EXE_FLAGS = -Dfile.encoding=utf-8 -showversion -verbose:gc -enableassertions 
#DEBUG_EXE_FLAGS += --enable-preview

RELEASE_EXE_FLAGS = -Dfile.encoding=utf-8 -showversion -verbose:gc
#RELEASE_EXE_FLAGS += --enable-preview

# ソースファイルのディレクトリ
SRCDIR = .
#SRCDIR = src
# クラスファイルの出力ディレクトリ
BINDIR = .
#BINDIR = bin
# デバッグビルド用の出力ディレクトリ
DEBUGDIR = $(BINDIR)\debug
# リリースビルド用の出力ディレクトリ
RELEASEDIR = $(BINDIR)\release

# メインクラス(実行するクラス)
MAIN = Main
# パッケージ名(必要に応じて変更)
PACKAGE = 

# ソースファイル
SOURCES = $(wildcard $(SRCDIR)/*.java)
# クラスファイル(デバッグ用)
DEBUG_CLASSES = $(patsubst $(SRCDIR)/%.java,$(DEBUGDIR)/%.class,$(SOURCES))
# クラスファイル(リリース用)
RELEASE_CLASSES = $(patsubst $(SRCDIR)/%.java,$(RELEASEDIR)/%.class,$(SOURCES))

# JARファイル名
JARFILE = $(MAIN).jar

# デフォルトターゲット
all: version release checkstyle

# デバッグビルド
debug: $(DEBUG_CLASSES)

# リリースビルド
release: $(RELEASE_CLASSES)

# デバッグ用クラスファイルのコンパイルルール
$(DEBUGDIR)/%.class: $(SRCDIR)/%.java
	@if not exist $(DEBUGDIR) mkdir $(DEBUGDIR)
	$(JC) $(DEBUG_FLAGS) -d $(DEBUGDIR) $<

# リリース用クラスファイルのコンパイルルール
$(RELEASEDIR)/%.class: $(SRCDIR)/%.java
	@if not exist $(RELEASEDIR) mkdir $(RELEASEDIR)
	$(JC) $(RELEASE_FLAGS) -d $(RELEASEDIR) $<

# プログラムの実行(デバッグビルド)
run-debug: $(DEBUG_CLASSES)
	$(JVM) $(DEBUG_EXE_FLAGS) -cp $(DEBUGDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)

# プログラムの実行(リリースビルド)
run-release: $(RELEASE_CLASSES)
	$(JVM) $(RELEASE_EXE_FLAGS) -cp $(RELEASEDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)

# デバッグモードでプログラムを実行
debug-mode: $(DEBUG_CLASSES)
	$(JDB) -sourcepath $(SRCDIR) -classpath $(DEBUGDIR) $(if $(PACKAGE),$(PACKAGE).)$(MAIN)

# JARファイルの作成(リリースビルド)
jar: $(RELEASE_CLASSES)
	@echo Main-Class: $(if $(PACKAGE),$(PACKAGE).)$(MAIN) > manifest.txt
	jar.exe cvfm $(JARFILE) manifest.txt -C $(RELEASEDIR) .
	@del manifest.txt

# JARファイルの実行
runjar: jar
	$(JVM) -jar $(JARFILE)

# クリーンアップ
clean:
	@if exist $(DEBUGDIR) ( \
		rmdir /s /q $(DEBUGDIR) && \
		echo $(DEBUGDIR) directory removed. \
	) else ( \
		echo $(DEBUGDIR) directory does not exist. \
	)
	@if exist $(RELEASEDIR) ( \
		rmdir /s /q $(RELEASEDIR) && \
		echo $(RELEASEDIR) directory removed. \
	) else ( \
		echo $(RELEASEDIR) directory does not exist. \
	)
	@if exist $(JARFILE) ( \
		del $(JARFILE) && \
		echo $(JARFILE) removed. \
	) else ( \
		echo $(JARFILE) does not exist. \
	)
	del out-google.txt
	del out-sun.txt
	del out.txt

#Checkstyle コードのスタイルと品質をチェックするツール
checkstyle:
	-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c /google_checks.xml -o out-google.txt $(MAIN).java
	-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c /sun_checks.xml -o out-sun.txt $(MAIN).java
	-$(JVM) -jar C:\Users\etsuk\bin\checkstyle-10.18.1-all.jar -c C:\Users\etsuk\bin\MyJavaCheckStyle.xml -o out.txt $(MAIN).java

# バージョン情報の表示
version:
	@$(JC) -version
	@$(JVM) -version
	@$(JDB) -version

# ヘルプ
help:
	@echo Available targets:
	@echo   all          : Compile all Java source files in release mode (default)
	@echo   debug        : Compile all Java source files in debug mode
	@echo   release      : Compile all Java source files in release mode
	@echo   run          : Run the compiled Java program (release build)(default)
	@echo   run-debug    : Run the compiled Java program (debug build)
	@echo   run-release  : Run the compiled Java program (release build)
	@echo   debug-mode   : Run the program in debug mode using JDB
	@echo   jar          : Create a JAR file (using release build)
	@echo   runjar       : Run the program from the JAR file
	@echo   clean        : Remove compiled files and JAR
	@echo   version      : Display Java compiler, runtime, and debugger versions
	@echo   help         : Display this help message

# PHONYターゲット
.PHONY: all debug release run-debug run-release debug-mode jar runjar clean version help

# runターゲット(run-releaseのエイリアス)
run: run-release
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?