【发布时间】:2016-03-23 09:17:59
【问题描述】:
我有一个 makefile,其中变量 $DEBUG 决定是为部署还是调试构建。有一个主要的 Makefile,以及包含多个特定于平台的 Makefile。我希望在构建目标test 时自动将变量$DEBUG 设置为1。
主makefile:
DEBUG := 0
test : override DEBUG := 1
DIST_DIR := dist/
ifeq ($(DEBUG), 1)
BUILD_DIR := build/debug
else
BUILD_DIR := build/deploy
endif
# detect operating system
ifeq ($(OS), Windows_NT)
UNAME := Windows
else
UNAME := $(shell uname -s)
endif
# include platform-specific Makefile
export
ifeq ($(UNAME), Darwin)
include Makefile.darwin
endif
ifeq ($(UNAME), Linux)
include Makefile.linux
endif
以及特定于平台的Makefile.linux:
...
CXX := clang++-3.8
CXXFLAGS := -std=c++14 -fPIC -I./external/include -fcolor-diagnostics
LDFLAGS :=
LDLIBS := -lpthread -lm
ifeq ($(DEBUG), 1)
CXXFLAGS += -g
else
CXXFLAGS += -O3 -DNDEBUG
endif
...
all : $(TARGET)
test : $(TEST_TARGET)
$(TEST_TARGET)
所以test 有两条规则:主makefile 中的一条设置目标特定变量$DEBUG,Makefile.linux 中的一条构建测试。用于构建的变量($CXXFLAGS、$BUILDDIR 等)设置在规则之前,并使用条件。
makefile 中的所有内容都正常工作,但是调用 make test 不会更改变量 $DEBUG:$CXXFLAGS 和 $BUILDDIR 仍然设置为构建部署时所具有的值。
有没有办法在目标为test时先在Makefile中设置$DEBUG := 1,然后正常进行?
或者是否有包含目标名称的特殊变量,例如
ifeq ($(MAKEFILE_TARGET), test)
...
endif
【问题讨论】:
-
您可以在 make 中以更优雅的方式处理条件:stackoverflow.com/a/35893827/412080
标签: makefile