我想创建一个 Makefile,其中在 ./build 目录中生成发布构建目标文件和程序,在 ./debug 目录中生成调试构建目标文件和程序。
为了实现这一点,我根据https://www.gnu.org/software/make/manual/make.html#Target_002dspecific
使用 make 的目标特定变量值功能但是由于某些原因,该功能没有更新目录来存储 .o 和程序。
Makefile 如下。当我运行命令时: 制作
然后在 ./build 目录中正确创建发布版本。
但是如果我跑: 进行调试
然后 .o 和程序文件也在 ./build 目录中生成?为什么该行中的目录没有更新:
调试:BUILD_DIR = ./debug
这里是Makefile
CXX=g++
CXXFLAGS=-Wall -std=c++17 -Wextra -Wconversion
PROJECTNAME=ntpserver
SOURCES = main.cpp select-server.cpp ntp-server.cpp address.cpp
BUILD_DIR = ./build
OBJ = $(SOURCES:%.cpp=$(BUILD_DIR)/%.o)
$(BUILD_DIR)/$(PROJECTNAME): $(OBJ)
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
debug: CPPFLAGS += -DDEBUG
debug: CXXFLAGS += -g
debug: BUILD_DIR = ./debug
debug: $(BUILD_DIR)/$(PROJECTNAME)
$(BUILD_DIR)/%.o: %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
.PHONY: clean
clean:
$(RM) $(BUILD_DIR)/*