目标特定变量值已更改但在 Makefile 中不起作用

问题描述 投票:0回答:0

我想创建一个 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)/*
makefile
© www.soinside.com 2019 - 2024. All rights reserved.