gpt4 book ai didi

gcc/g++ 选项将所有目标文件放在单独的目录中

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:16 24 4
gpt4 key购买 nike

我想知道为什么 gcc/g++ 没有将生成的目标文件放入指定目录的选项。

例如:

mkdir builddir
mkdir builddir/objdir
cd srcdir

gcc -c file1.c file2.c file3.c **--outdir=**../builddir/objdir

我知道可以通过为编译器提供单独的 -o 选项来实现这一点,例如:

gcc -c file1.c -o ../builddir/objdir/file1.o
gcc -c file2.c -o ../builddir/objdir/file2.o
gcc -c file3.c -o ../builddir/objdir/file3.o

...而且我知道我可以通过 VPATH 和 vpath 指令编写 Makefile 来简化这一过程。

但这在复杂的构建环境中需要大量工作。

我也可以用

gcc -c file1.c file2.c file3.c

但是当我使用这种方法时,我的 srcdir 之后充满了 .o 垃圾。

所以我认为具有 --outdir 语义的选项会非常有用。

你怎么看?

编辑:我们的 Makefile 的编写方式是将 .o 文件实际放入 builddir/obj 中。但我只是想知道是否有更好的方法。

编辑:有几种方法可以将实现所需行为的负担交给构建系统(也称为 Make、CMake 等)。但我认为它们都是针对 gcc(以及其他编译器)弱点的变通方法

最佳答案

这是我的一个项目的精简 makefile,它编译“src”中的源代码并将 .o 文件放在目录“obj”中。关键是 patsubst() 函数的使用——有关详细信息,请参阅 GNU make 手册(实际上是一本很好的读物):

OUT = lib/alib.a
CC = g++
ODIR = obj
SDIR = src
INC = -Iinc

_OBJS = a_chsrc.o a_csv.o a_enc.o a_env.o a_except.o \
a_date.o a_range.o a_opsys.o
OBJS = $(patsubst %,$(ODIR)/%,$(_OBJS))


$(ODIR)/%.o: $(SDIR)/%.cpp
$(CC) -c $(INC) -o $@ $< $(CFLAGS)

$(OUT): $(OBJS)
ar rvs $(OUT) $^

.PHONY: clean

clean:
rm -f $(ODIR)/*.o $(OUT)

关于gcc/g++ 选项将所有目标文件放在单独的目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454041/

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