为什么我的makefile在发布版本之后没有创建调试文件夹?

时间:2016-04-13 15:05:15

标签: makefile

我有一个构建我的项目的makefile。

使用make调用时构建正常,但如果我之后尝试执行make debug,它甚至不会尝试创建调试输出目录,这意味着链接失败,即使我在构建之间调用make clean

如果删除“release”文件夹,则调试版本可以正常工作。

有谁知道为什么会这样?

生成文件

EXEC_DIR = ../../../../Bin/linux/release/
EXECUTABLE = $(EXEC_DIR)/prog
CC = g++
DEBUG = -g -D_DEBUG

...

CFLAGS = -Wall -c $(INCLUDE_DIRS) -std=c++11
LFLAGS = -Wall

...

all : $(EXECUTABLE)

debug : EXEC_DIR = ../../../../Bin/linux/debug/
debug : EXECUTABLE = $(EXEC_DIR)/prog
debug : CFLAGS += $(DEBUG)
debug : LFLAGS += $(DEBUG)
debug : $(EXECUTABLE)

$(EXECUTABLE) : $(OBJS) | $(EXEC_DIR)
    $(CC) $(LFLAGS) $(OBJS) -o $(EXECUTABLE)

$(EXEC_DIR) :
    mkdir -p $(EXEC_DIR)

...

clean :
    -rm *.o *~

1 个答案:

答案 0 :(得分:1)

所以你正在做的是创建一个Target Variable,它只在debug食谱(而不是它的子食谱)的范围内有效。您可能想要做的是如下行:

ifeq ($(filter debug,$(MAKECMDGOALS)),debug)
    EXEC_DIR = ../../../../Bin/linux/debug/
    OBJ_DIR = ../../../../Bin/linux/debug/objs
    ...
endif

然后将$(OBJ_DIR)添加到所有目标文件中。这解决了Etan提到的不重建的源文件。