我的目录结构为
src
\__lib_foo
| \__ foo.c foo.h
\__ main
\__ main.c main.h
main是主应用程序,main.c使用foo.c中定义的一些函数。 对我的要求是“lib_foo必须编译但不能分发”..我怎样才能实现这个?
提前致谢
答案 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