我搜索了这个问题的答案,但找不到任何好处。也许他们已经老了,事情发生了变化,所以我再问一遍。
我有一个目录结构:
MY_PROJECT
的src
仓
我想要的是,当我在根目录中制作时,二进制文件放在./bin中,而不是混乱./src。但是如何?
编辑:我正在使用C ++。我的Makefile.am没什么特别的。只是bin_PROGRAM和_SOURCES变量。当我运行make时,生成的二进制文件被放入./src。我只想把它们放在./bin。
答案 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”吞下它。虽然不能那么多黑客......