0

プロジェクトのデバッグ構成とリリース構成を作成しようとしていますが、何が問題なのか理解できません。

何らかの理由で、「make debug」を実行すると、makeは「all」の依存関係をスキップし、g ++からのエラーを大量に発生させます(そのようなファイルやディレクトリはありません)。さらに奇妙なことに、私が「すべてを作る」とすれば、すべてがうまく機能します。

これがmakefileです:

SHELL=/bin/sh
CXX=g++
LIBS=-LE:\Software\StrategyEngine\Release -llibdebug
CFLAGS=-Wall -O3 -IE:\Software\StrategyEngine\include

BDIR=Build\Release

debug: CFLAGS+=-g -DDEBUG
debug: LIBS=-LE:\Software\StrategyEngine\Debug -llibdebug
debug: BDIR=Build\Debug

OBJS= $(BDIR)\blocksort.o  \
      #... more object files
      $(BDIR)\CompressionStream.o

debug: all

all: $(OBJS) 
    $(CXX) $(LIBS) -shared -o $(BDIR)\libbz2.dll $(OBJS)
    $(CXX) $(LIBS) $(CFLAGS) -o $(BDIR)\bzip2-shared bzip2.cpp $(BDIR)\libbz2.dll

$(BDIR)\blocksort.o: blocksort.cpp
    $(CXX) $(CFLAGS) -c blocksort.cpp -o $(BDIR)\blocksort.o
#.... more rules for each object file defined in OBJS

clean: 
    rm -f Build\debug\* Build\release\*

なぜこうなった?makefileにエラーが見つかりません。

私はWindows7で実行されているmingwコンパイラスイート(バージョン3.81を作成)を使用しています。

4

1 に答える 1

2

makefile内のオブジェクトファイルの場所BDIRは、ビルドモードによって変わりません。

次のようにスクリプトをリファクタリングすることをお勧めします。

SHELL=/bin/sh
CXX=g++

BUILD := debug # default mode

CFLAGS.release := -Wall -O3 -IE:/Software/StrategyEngine/include -D_NDEBUG
CFLAGS.debug   := -Wall -g  -IE:/Software/StrategyEngine/include -DDEBUG
LIBS.release := -LE:/Software/StrategyEngine/Release -llibdebug
LIBS.debug   := -LE:/Software/StrategyEngine/Debug -llibdebug
BDIR.release := Build/Release
BDIR.debug   := Build/Debug

CFLAGS := ${CFLAGS.${BUILD}}
LIBS := ${LIBS.${BUILD}}
BDIR := ${BDIR.${BUILD}}

OBJS= $(BDIR)/blocksort.o  /
      #... more object files
      $(BDIR)/CompressionStream.o

all: $(OBJS)
    $(CXX) $(LIBS) -shared -o $(BDIR)/libbz2.dll $(OBJS)
    $(CXX) $(LIBS) $(CFLAGS) -o $(BDIR)/bzip2-shared bzip2.cpp $(BDIR)/libbz2.dll

$(BDIR)/blocksort.o: blocksort.cpp
    $(CXX) $(CFLAGS) -c blocksort.cpp -o $(BDIR)/blocksort.o
#.... more rules for each object file defined in OBJS

clean:
    rm -f Build/debug/* Build/release/*

.PHONY: all clean 

そしてそれを次のように使用します:

make BUILD=debug
make BUILD=release
于 2012-07-17T10:56:17.690 に答える