プロジェクトを希望どおりにビルドするためのメイクファイルの設計方法を理解するのに苦労しています。具体的には、プロジェクトのルートにあるリンクされた実行可能ファイルを除いて、src
すべてのバイナリをディレクトリに配置しながら、すべてのソースファイルをディレクトリに保持する方法を理解できません。bin
これは私のメイクファイルです:
# Compiler options
FC := mpif90
FFLAGS := -O3 -g -Wall -Warray-bounds -ffixed-line-length-none -fbounds-check
VPATH := src
BINDIR := bin
# Define file extensions
.SUFFIXES:
.SUFFIXES: .f .o .mod
# All modules
OBJS := $(BINDIR)/ratecoeffs.o $(BINDIR)/interpolation.o $(BINDIR)/io.o $(BINDIR)/eedf.o $(BINDIR)/single_particle.o $(BINDIR)/physics.o $(BINDIR)/random.o $(BINDIR)/mpi.o $(BINDIR)/precision.o $(BINDIR)/populations.o
# Build rules
all: runner | $(BINDIR)
$(BINDIR):
mkdir -p $(BINDIR)
$(BINDIR)/%.o: $(VPATH)/%.f | $(BINDIR)
$(FC) $(FFLAGS) -c $^ -o $@
runner: $(OBJS)
clean:
@rm -rf $(BINDIR)
実行make
すると、すべてが正常にビルドされます - すべてのソース ファイルが検索されsrc
、すべての.o
ファイルが配置されますが、コンパイラによって生成されるbin
モジュール ファイル ( ) は、ディレクトリ.mod
ではなくプロジェクト ルートに配置されます。bin
それらをそこに配置するルールを指定するだけでよいことに気づきましたが、それはビルド順序を台無しにし、ビルドを壊すことがあります。
この動作を取得する「正しい」方法は何ですか?
はい、autotools と automake を見てきましたが、これまで使用したことがなく、このプロジェクトではやり過ぎのようです。それらがどのように機能するかについての良いチュートリアルを見つけることができなかったので (いいえ、私はgnu.org のチュートリアルが好きではありませんでした)、このツールを機能させるためだけにこのツールを学ぶ必要がないようにしたいと思います...