【发布时间】:2010-12-21 07:39:45
【问题描述】:
我想知道为什么 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(以及其他编译器)的弱点的解决方法。
【问题讨论】:
-
您提到了一个复杂的构建环境,所以如果您使用自动工具,您可以在源目录之外进行配置和构建。
-
不,这不是我的选择。我认为 autotools 太复杂而无法学习,不是为了我,而是为了团队中的其他人。即使您不是 unix 向导,选项 --outdir 也很容易理解。
-
尼斯尼克。 ;-) Autotools 的优点是它们一旦编写就不需要太多关注(就像编写良好的 Makefile 一样),因此没有必要对整个团队进行培训。
-
关于 Autotools:如果某些东西没有按预期工作,它们将是一场真正的噩梦。
-
如果您改用 CMake,您不必直接处理 autotools,仍然可以享受 autotools 风格的配置/构建的好处。