自动生成二进制文件到bin /而不是src /

时间:2010-01-26 14:05:30

标签: autotools autoconf automake

我搜索了这个问题的答案,但找不到任何好处。也许他们已经老了,事情发生了变化,所以我再问一遍。

我有一个目录结构:

MY_PROJECT

  • 的src

我想要的是,当我在根目录中制作时,二进制文件放在./bin中,而不是混乱./src。但是如何?

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

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

3 个答案:

答案 0 :(得分:34)

你在这里有错误的想法。

您的构建树就在您运行configure的任何位置。这就是autoconf的设计方式。你的软件包的用户(不想让他们的源代码树混乱)会期望它以这种方式工作。

这种方法是一种更通用的解决方案,比您想象的组织具有更大的灵活性。例如,想要在不同的文件系统上维护源代码和构建文件并不是非常不寻常。

答案 1 :(得分:26)

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

如果您不想使源目录混乱,请尝试:

cd my_project
mkdir build
cd build
../configure
make

这会将所有生成的文件(如makefile,二进制文件,目标文件)放在my_project/build的子目录中。

答案 2 :(得分:14)

告诉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”吞下它。虽然不能那么多黑客......