Yan*_*euc 4 c gcc makefile gnu-make
我想跟进这个问题及其答案...现在我可以构建两个不同的可执行文件,我想根据变量在不同的目录中构建可执行文件。
我想从这样的事情开始:
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)
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
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)
Run Code Online (Sandbox Code Playgroud)
上面的最后一个 makefile 不起作用,因为据我了解,在规则中设置变量EXEDIR
和为时已晚。OBJECTSDIR
release
debug
那么,我在这里错过了一些简单的事情吗?有没有办法拥有这两个规则release
并debug
使用相同的规则,但在两组不同的目录中生成文件,包括作为主要目标的可执行文件?
您可以调用以下 Makefile:
make release
make debug
Run Code Online (Sandbox Code Playgroud)
- 或者 -
make BUILD=release
make BUILD=debug
Run Code Online (Sandbox Code Playgroud)
生成文件
ifneq ($(BUILD),release)
BUILD = debug
endif
EXEDIR = bin/$(BUILD)/
OBJDIR = o/$(BUILD)/
EXE = $(EXEDIR)AmiModRadio
SOURCES = $(wildcard *.c)
OBJECTS = $(addprefix $(OBJDIR), $(SOURCES:.c=.o))
CC = vbcc:bin/vc
LD = vbcc:bin/vc
CFLAGS = $(shell vbccprefs)
LDFLAGS = $(shell vbccprefs)
all : $(EXE)
.PHONY : release debug
release debug :
$(MAKE) BUILD=$@
$(EXE) : $(OBJECTS)
$(LD) $(LDFLAGS) -o $@ $^
$(OBJDIR)%.o : %.c
$(CC) $(CFLAGS) -o $@ -c $<
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2510 次 |
最近记录: |