私はAdaのプロジェクトに取り組んでいて、カスタムのmakefileを望んでいます(私はcとpythonとやりとりし、makefileの構文に精通していて、gnatmakeのプロジェクト構文に精通していません)。私はカスタムコンパイルを使いこなしていましたが、それは動作していると思っていましたが、バインディング段階で全く同じコマンドライン実行が問題に遭遇するような、少なくとも私のmakefileは見えます。Ada Makefileバインディングの問題
私はたぶんオフ・バイ・ワンのディレクトリ・エラーが発生しているか、何かを複雑にしています。
私のプロジェクトには現在、3つのソースディレクトリが含まれています(しかし、もっと来ています)。モデルには '論理'が含まれ、utilには一般的なユーティリティが含まれ、テストにはパッケージ化されていない 'メイン'手順が含まれています。最終的には、私のsrcディレクトリにいくつかの 'main'プロシージャもあります。 ASCIIの画像:問題はいつでもデバッグフラグこれは、作業ディレクトリにそれらb~*
のファイルを作成することです
.PHONY: clean test
MAKE=gnatmake
INCLUDE_DIRS=-Imodel -Iutil -Itest
GNATMAKEFLAGS=-g -fprofile-arcs -ftest-coverage --GNATLINK="gnatlink -v" --GNATBIND="gnatbind -v"
GCCFLAGS=-g -fprofile-arcs -ftest-coverage
OBJDIR=../obj
BINDFLAGS=-a0$(OBJDIR)
PLAYER_TEST_EXE=../bin/player_test.out
test : $(PLAYER_TEST_EXE)
$(PLAYER_TEST_EXE) : test/player_test.adb
gnatmake $< -D $(OBJDIR) $(INCLUDE_DIRS) -o [email protected] $(GNATMAKEFLAGS)
clean :
@rm -rf $(OBJDIR)/* $(PLAYER_TEST_EXE) b~*
:
project
\- bin
\- test
\- ....out
\- other_dirs_coming_soon
\- ....out
\- ....out
\- obj
\- all the mess that ada compilation makes
\- including .o, .ali, and b~whatever.ad(b/s)
\- src
\- model
\- ....ad(b/s)
\- util
\- ....ad(b/s)
\- ...
私は私が望んでいたものに非常に近かった「基本」メイクを試してみました合格。私は多くの実行可能ファイルをたくさん持っているので、これは私の作業ディレクトリを著しく汚染します。このように
は、私はメイクのステップ・バイ・ステップを開き、剥離してしまった:それは結合に到達したときに、それを除いて、実際に近いと思わ
.PHONY: clean test
GCC=gcc
BINDER=gnatbind
ADALIBLOC=`gnatls -v | grep adalib`
FLAGS=
LINKFLAGS=-gnatA -gnatWb -gnatiw -gnatws
test: FLAGS+=-g -fprofile-arcs -ftest-coverage
test: LINKFLAGS+=-g
# Where to put the object files and ali extensions
OBJDIR=../obj
# Source directories
MODEL_DIR=model
UTIL_DIR=util
TEST_DIR=test
SRC_DIRS=$(MODEL_DIR) $(UTIL_DIR) $(TEST_DIR)
INC_DIRS=${SRC_DIRS:%=-I%}
LIB_DIRS=${SRC_DIRS:%=-L%}
BIND_DIRS=${SRC_DIRS:%=-aO./%}
# Model sources
MODEL_SPECS=$(wildcard $(MODEL_DIR)/*.ads)
MODEL_BODIES=$(wildcard $(MODEL_DIR)/*.adb)
MODEL_OBJECTS=$(patsubst %.ads,$(OBJDIR)/%.o,$(MODEL_SPECS))
MODEL_ALI=$(patsubst %.ads,$(OBJDIR)/%.ali,$(MODEL_SPECS))
# Util sources
UTIL_SPECS=$(wildcard $(UTIL_DIR)/*.ads)
UTIL_BODIES=$(wildcard $(UTIL_DIR)/*.adb)
UTIL_OBJECTS=$(patsubst %.ads,$(OBJDIR)/%.o,$(UTIL_SPECS))
UTIL_ALI=$(patsubst %.ads,$(OBJDIR)/%.ali,$(UTIL_SPECS))
# All sources
ALL_SPECS=$(MODEL_SPECS) $(UTIL_SPECS)
ALL_BODIES=$(MODEL_BODIES) $(UTIL_BODIES)
ALL_OBJECTS=$(MODEL_OBJECTS) $(UTIL_OBJECTS)
ALL_ALIS=$(MODEL_ALI) $(UTIL_ALI)
# Executables
EXE_DIR=../bin
PLAYER_TEST_EXE=$(EXE_DIR)/test/player_test.out
# Targets
test : $(PLAYER_TEST_EXE)
# Executable creation
$(EXE_DIR)/%.out : $(EXE_DIR)/%.o $(ALL_OBJECTS)
cd $(EXE_DIR)
$(GCC) $*.o $(ALL_OBJECTS) $(FLAGS) -o [email protected] $(LIB_DIRS) -L$(ADALIBLOC)/libgnat.a --static-libgcc
# Executable object creation
$(EXE_DIR)/%.o : $(EXE_DIR)/%.adb
cd $(OBJBINDIR)
$(GCC) -c $(FLAGS) $(LINKFLAGS) $< -o [email protected]
# Executable source creation
$(EXE_DIR)/%.adb : $(OBJDIR)/%.ali $(ALL_OBJECTS)
cd $(EXE_DIR)
$(BINDER) $(BIND_DIRS) $(INC_DIRS) -v -x ../$< -o ../$*.adb
# Object creation
$(OBJDIR)/%.o : %.adb %.ads
$(OBJDIR)/%.o :
if [ -a $*.adb ]; then \
gcc -c $*.adb $(INC_DIRS) -o [email protected] $(FLAGS); \
else \
gcc -c $*.ads $(INC_DIRS) -o [email protected] $(FLAGS); \
fi;
# ALI creation
$(OBJDIR)/%.ali : %.adb %.ads
$(OBJDIR)/%.ali :
if [ -a $*.adb ]; then \
gcc -c $*.adb $(INC_DIRS) -o $(OBJDIR)/$*.o $(FLAGS); \
else \
gcc -c $*.ads $(INC_DIRS) -o $(OBJDIR)/$*.o $(FLAGS); \
fi;
clean:
@rm -f $(ALL_OBJECTS) $(ALL_ALI)
がplayer_test.aliを見つけることができませんステージ。
アドバイスはありますか?
このようにすると、依存関係を正しく取得できません。 gnatmakeはMakefileフォームの依存関係を出力するために-Mをサポートするために使用されましたが、それ以上はありません。 –