我有一个构建我的项目的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 *~
答案 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提到的不重建的源文件。