Autotools - 编译但不分发

时间:2012-01-26 16:54:00

标签: autotools

我的目录结构为

src
 \__lib_foo
 |   \__ foo.c foo.h
 \__ main
      \__ main.c main.h

main是主应用程序,main.c使用foo.c中定义的一些函数。 对我的要求是“lib_foo必须编译但不能分发”..我怎样才能实现这个?

提前致谢

2 个答案:

答案 0 :(得分:3)

autotools提供了一个分发源代码的框架,而不是编译产品。如果这是你的问题,你可以轻松地使用自动化项目来构建二进制包(rpm,deb,pkg等)并分发它。另一方面,如果你只是想找到一种方法来使用foo.c构建一个方便库,main在构建过程中静态链接,那么(假设你使用的是automake)你想把它放在Makefile中。是:

bin_PROGRAMS= main
noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = foo.c

如果将foo.c的名称更改为libfoo.c,则不需要第三行。

- 在编辑问题后编辑以显示非平面目录结构 -

如果您在同一目录中没有foo.c和main.c,则需要做更多工作。 在toplevel / Makefile.am中:

# You must list lib_foo first
SUBDIRS = lib_foo main

在lib_foo / Makefile.am

noinst_LIBRARIES = libfoo.a
libfoo_a_SOURCES = foo.c

并在main / Makefile.am

bin_PROGRAMS = main
main_LDADD = ../lib_foo/libfoo.a

答案 1 :(得分:0)

编译程序永远不会分发,但编译程序的源代码当然通常是分布式的。 (没有源代码的源代码分发没有多大意义,是不是。)还有nodist_*_SOURCES(参见第14.2章“自动生成手册”中的细粒度分布控制)。另请注意,除非覆盖,否则BUILT_SOURCES默认为nodist,例如

bin_PROGRAMS = foo
nodist_foo_SOURCES = foo.c
BUILT_SOURCES = foo.c

但:

bin_PROGRAMS = foo
foo_SOURCES = foo.c
BUILT_SOURCES = foo.h