我是一位有益的助手,可以为您翻译文本。
上述最后一个makefile无法工作,因为据我所知,在规则
我希望跟进这个问题和它的答案...现在我可以构建两个不同的可执行文件,我想根据一个变量在不同的目录中构建可执行文件。
我想从以下内容开始:
EXEDIR = bin/release/
EXE = $(EXEDIR)AmiModRadio
SOURCES = $(wildcard *.c)
OBJECTSDIR = o/release/
OBJECTS = $(addprefix $(OBJECTSDIR), $(SOURCES:.c=.o))
CC = vbcc:bin/vc
LD = vbcc:bin/vc
release : $(EXE)
$(OBJECTS) : $(OBJECTSDIR)%.o : %.c
$(CC) $(shell vbccprefs) -c $< -o $@
$(EXE) : $(OBJECTS)
$(LD) $(shell vbccprefs) -o $(EXE) $(OBJECTS)
变成类似这样:
EXE = $(EXEDIR)AmiModRadio
SOURCES = $(wildcard *.c)
OBJECTS = $(addprefix $(OBJECTSDIR), $(SOURCES:.c=.o))
CC = vbcc:bin/vc
LD = vbcc:bin/vc
release : EXEDIR = bin/release/
release : OBJECTSDIR = o/release/
release : $(EXE)
release : EXEDIR = bin/debug/
release : OBJECTSDIR = o/debug/
release : $(EXE)
$(OBJECTS) : $(OBJECTSDIR)%.o : %.c
$(CC) $(shell vbccprefs) -c $< -o $@
$(EXE) : $(OBJECTS)
$(LD) $(shell vbccprefs) -o $(EXE) $(OBJECTS)
上述最后一个makefile无法工作,因为据我所知,在规则
release
和debug
中设置变量EXEDIR
和OBJECTSDIR
太晚了。那么,我是否遗漏了一些简单的东西?有没有办法让两个规则release
和debug
使用相同的规则,但在两个不同的目录集中生成文件,包括作为主要目标的可执行文件?
make release
或make debug
时,$(BUILD)为空)。 - Yann-Gaël GuéhéneucMakefile
不需要传递BUILD=<type>
参数。我的第一个解决方案需要,但我已经改变了。无论如何,了解这两种方法都是好的。 - Ziffusion