私は長い間、悪い慣行が他の悪い慣行の上に積み重なったビルドシステムに取り組んでおり、ビルドを書き直しているところです。関連する言語は C/C++、Fortran、Ada、および Java であり、当面は GNU スタイルの makefile を使用しますが、SCons などの他の代替手段を検討しています。
そうは言っても、「別のビルドシステムを使用する」などの形式の推奨事項ではなく、いくつかの特定の推奨事項を探しています。
私が今見ている特定のメイクファイルを作成した人は誰でも、次のような Java コードの順次ビルドを計画していました。
LIST_OF_JAVA_FILES = file1.java
LIST_OF_JAVA_FILES += file2.java
LIST_OF_JAVA_FILES += file3.java
...
LIST_OF_JAVA_FILES += fileN.java
all: ${LIST_OF_JAVA_FILES}
${LIST_OF_JAVA_FILES} : %.class : %.java
${JAVAC} ${CLASSPATH} ${<}
シリアルでビルドを実行する場合、これは正常に機能します。ただし、依存関係が混在するとすぐに、問題が大きくなります。
- C/C++ コンパイラには、依存関係を生成するためのオプションが組み込まれています。Java にも同様の機能はありますか?
- 依存関係を生成するためにサードパーティのツール (Jikes など) を使用する必要がありますか?
- 一般的に言えば、チームが Java 関連のものをビルドするために makefile を使用している場合、Java コンパイラを 1 回呼び出して、すべての
.java
ファイルを 1 つのコマンドラインでリストするのと、ファイルごとに 1 つのターゲットを指定するのとでは、どちらがより一般的.class
でしょうか?- これがより一般的である場合、これは厳密に単純化のためですか、それとももっと深い理由がありますか?
- 注:順次ビルドの場合、これがより高速なオプションであることは理解していますが、並列ビルドの経験的テストを行うための回答が必要です