gpt4 book ai didi

c - 使用 GNU Make 同时构建调试和发布目标(扩展)

转载 作者:行者123 更新时间:2023-12-04 02:15:14 25 4
gpt4 key购买 nike

我想跟进 this question and its answers ...现在我可以构建两个不同的可执行文件,我想根据变量在不同的目录中构建可执行文件。

我想从以下方面出发:

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 不起作用,因为据我所知,设置变量 EXEDIROBJECTSDIR在规则 releasedebug太晚了。

那么,我在这里错过了一些简单的东西吗?有没有办法让这两个规则 releasedebug使用相同的规则但在两组不同的目录中生成文件,包括作为主要目标的可执行文件?

最佳答案

您可以将以下 Makefile 调用为:

make release
make debug

- 或者 -
make BUILD=release
make BUILD=debug

生成文件
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 $<

关于c - 使用 GNU Make 同时构建调试和发布目标(扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com