私はmakefilesを初めて使っています。私はmakefileの作成や他の関連する概念を "GNU makeプロジェクトでの管理"から学びました。 makefileはすぐに準備ができており、作成したものがOKであることを確認する必要があります。ここでは、メイクファイルリリースとデバッグビルドを使用したシンプルなメイクファイル
#Main makefile which does the build
#makedepend flags
DFLAGS =
#Compiler flags
#if mode variable is empty, setting debug build mode
ifeq ($(mode),release)
CFLAGS = -Wall
else
mode = debug
CFLAGS = -g -Wall
endif
CC = g++
PROG = fooexe
#each module will append the source files to here
SRC := main.cpp
#including the description
include bar/module.mk
include foo/module.mk
OBJ := $(patsubst %.cpp, %.o, $(filter %.cpp,$(SRC)))
.PHONY:all
all: information fooexe
information:
ifneq ($(mode),release)
ifneq ($(mode),debug)
@echo "Invalid build mode."
@echo "Please use 'make mode=release' or 'make mode=debug'"
@exit 1
endif
endif
@echo "Building on "$(mode)" mode"
@echo ".........................."
#linking the program
fooexe: $(OBJ)
$(CC) -o $(PROG) $(OBJ)
%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o [email protected]
depend:
makedepend -- $(DFLAGS) -- $(SRC)
.PHONY:clean
clean:
find . -name "*.o" | xargs rm -vf
rm -vf fooexe
質問
- 上記のメイクファイルがリリースとうまく動作し、デバッグビルドです。しかし、それは正しい形式ですか?それとも何か欠陥があるのですか?
- 上記のmakefileは、makeを使用して呼び出されると、デフォルトでデバッグビルドを行います。リリースビルドの場合、make mode = releaseが必要です。これは正しいアプローチですか?
- g ++に提供されているデバッグフラグとリリースコンパイラフラグは正しいですか?デバッグのために、私は-g -Wallを使用し、リリースについては、ちょうど-Wallを使用します。これは正しいですか?
助けがあれば助かります。
Makefileを含むあなたのソフトウェアのソースをリリースする予定ですか?バイナリを出荷していますか?すなわち、あなたとあなたのチーム以外の誰もがこのMakefileを見て、使用しますか? – Schwern
はい。これはオープンソースプロジェクトなので、私はソースコードを公開する予定です。 –