29

我搜索了这个问题的答案,但找不到任何好处。也许他们老了,有些东西变了,所以我再问一次。

我有一个目录结构:

我的项目

  • 源代码

我想要这样,当我在根目录中制作时,将二进制文件放在 ./bin 中,而不是杂乱无章的 ./src。但是怎么做?

编辑:我正在使用 C++。我的 Makefile.am 没有什么特别的。只是 bin_PROGRAM 和 _SOURCES 变量。

当我运行 make 时,生成的二进制文件被放入 ./src。我只是希望它们在 ./bin 中。

4

3 回答 3

37

你在这里有错误的想法。

Your build tree is wherever you run configure. That's how autoconf is designed to work. Users of your package (who do not want to clutter their source tree) will expect it to work this way.

This approach is a more general solution with a lot more flexibility than the organization you're imagining. For instance, it's not terribly unusual to want to maintain sources and build files on separate filesystems.

于 2010-02-14T07:06:16.467 回答
28

如果您尝试以与预期不同的方式设置目录,Automake 就不能很好地应对。您想要的将涉及编写额外的规则以../bin在编译后将二进制文件移动到它们,这是不必要的复杂。

如果您不想弄乱源目录,请尝试以下操作:

cd my_project
mkdir build
cd build
../configure
make

这会将所有生成的文件(如 makefile、二进制文件、目标文件)放在my_project/build.

于 2010-01-27T09:33:44.813 回答
17

告诉 Automake 在某个目录中创建二进制文件的一种方法是将此目录添加到“bin_PROGRAMS”变量中的名称。

考虑以下 src/Makefile.am:

bin_PROGRAMS = foo
foo_SOURCES = ...
foo_CPPFLAGS = ...
foo_LDFLAGS = ...

它会创建一个二进制“src/foo”,但您可以告诉 Automake 使用 src 中的源来创建一个二进制“bin/foo”:

bin_PROGRAMS = $(top_builddir)/bin/foo
__top_builddir__bin_foo_SOURCES = ...
__top_builddir__bin_foo_CPPFLAGS = ...
__top_builddir__bin_foo_LDFLAGS = ...

我尝试了一些软件包,甚至“make distcheck”都吞下了它。虽然不能那么黑客......

于 2010-02-05T08:36:34.587 回答