我搜索了这个问题的答案,但找不到任何好处。也许他们老了,有些东西变了,所以我再问一次。
我有一个目录结构:
我的项目
源代码
斌
我想要这样,当我在根目录中制作时,将二进制文件放在 ./bin 中,而不是杂乱无章的 ./src。但是怎么做?
编辑:我正在使用 C++。我的 Makefile.am 没有什么特别的。只是 bin_PROGRAM 和 _SOURCES 变量。
当我运行 make 时,生成的二进制文件被放入 ./src。我只是希望它们在 ./bin 中。
你在这里有错误的想法。
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.
如果您尝试以与预期不同的方式设置目录,Automake 就不能很好地应对。您想要的将涉及编写额外的规则以../bin
在编译后将二进制文件移动到它们,这是不必要的复杂。
如果您不想弄乱源目录,请尝试以下操作:
cd my_project
mkdir build
cd build
../configure
make
这会将所有生成的文件(如 makefile、二进制文件、目标文件)放在my_project/build
.
告诉 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”都吞下了它。虽然不能那么黑客......