gpt4 book ai didi

makefile - 如何更改 GNU Make 中的当前目录

转载 作者:行者123 更新时间:2023-12-02 19:58:09 25 4
gpt4 key购买 nike

我想将源目录与目标目录分开。看来从 Makefile 更改当前工作目录应该是最简单的解决方案。

由于以下缺点,目标的显式路径是不够的:

  1. Makefile 中的冗余代码,因为对目标的每个引用都应以变量为前缀。
  2. 更复杂的命令行来构建特定的中间目标(对于调试来说更糟糕)。

另请参阅Pauls's rule #3 :

Life is simplest if the targets are built in the current working directory.

Regarding VPATH — 我也同意要求开发人员“在运行 make 之前更改到目标目录是一件痛苦的事情”。

最佳答案

在单独的目录中构建目标是常见的 make 做法GNU make 方便地支持,无需更改目录或调用辅助工具。这是一个例行说明:

Makefile

srcs := main.c foo.c
blddir := bld
objs := $(addprefix $(blddir)/,$(srcs:.c=.o))
exe := $(blddir)/prog

.PHONY: all clean

all: $(exe)

$(blddir):
mkdir -p $@

$(blddir)/%.o: %.c | $(blddir)
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

$(exe) : $(objs)
$(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)

clean:
rm -fr $(blddir)

运行如下:

$ make
mkdir -p bld
cc -c -o bld/main.o main.c
cc -c -o bld/foo.o foo.c
cc -o bld/prog bld/main.o bld/foo.o

婴儿床:-

可能有充分的理由让 make 更改其工作目录,但是仅仅将构建产品放在单独的目录中是不行的。

关于makefile - 如何更改 GNU Make 中的当前目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37467969/

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