我想将源目录与目标目录分开。看来从 Makefile 更改当前工作目录应该是最简单的解决方案。
由于以下缺点,目标的显式路径是不够的:
- Makefile 中的冗余代码,因为对目标的每个引用都应以变量为前缀。
- 更复杂的命令行来构建特定的中间目标(对于调试来说更糟糕)。
也可以看看保罗斯规则#3:
如果目标是在当前的工作中建立的,那么生活是最简单的
目录。
关于VPATH— 我也同意要求开发人员“在运行 make 之前更改到目标目录是一件痛苦的事情”。
在单独的目录中构建目标是很常见的make
实践
那个 GNUmake
方便地支持,无需更改目录或
调用辅助工具。这是一个例行说明:
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
Cribs:-
-
$(addprefix $(blddir)/,$(srcs:.c=.o))
- 8.2 字符串替换和分析函数
- 6.3.1 替换参考
-
$(blddir)/%.o: %.c | $(blddir)
- 10.5 定义和重新定义模式规则
- 4.3 先决条件的类型
可能有充分的理由make
更改其工作目录但是
仅仅将构建产品放在单独的目录中并不是这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)