我想知道为什么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(和其他编译器)的弱点的“变通方法”。