C 自动工具:一个项目,一个可执行文件,一个共享对象和一个;“共享”;内部图书馆

C 自动工具:一个项目,一个可执行文件,一个共享对象和一个;“共享”;内部图书馆,c,autotools,libtool,C,Autotools,Libtool,我正在尝试自动工具。我有以下项目层次结构: project/src project/src/utilities project/src/utilities/util.c project/src/utilities/util.h project/src/sharedObject project/src/sharedObject/sharedObject.c project/src/sharedObject/sharedObject.h

我正在尝试自动工具。我有以下项目层次结构:

    project/src
    project/src/utilities
    project/src/utilities/util.c
    project/src/utilities/util.h
    project/src/sharedObject
    project/src/sharedObject/sharedObject.c
    project/src/sharedObject/sharedObject.h
    project/src/sharedObject/thing.c
    project/src/executable
    project/src/executable/exec.c
    project/src/executable/exec.h
    project/src/executable/thing1.c
    project/src/executable/thing2.c
“executable”
“sharedObject.so”
都依赖于
“util.o”
“util.h”
。我见过创建便利库的示例,但我不确定如何在其他两个子项目的
“Makefile.am”
文件中指定它们。这些类型的项目间依赖关系是如何定义的

“可执行文件”
“共享对象”。因此将安装“
”。
“util.o”
“util.h”
文件将仅在生成过程中使用


谢谢你
实用程序/Makefile.am
中的:

noinst_LTLIBRARIES = libutil.la   
libutil_la_SOURCES = util.h util.c
executable/Makefile.am
中,库的使用应使用
LDADD
主程序,例如

bin_PROGRAMS = exec
exec_SOURCES = exec.h exec.c thing.h thing.c
exec_LDADD = ../utilities/libutil.la
sharedObject/Makefile.am
中,使用
LIBADD
主:

lib_LTLIBRARIES = sharedObject.la
sharedObject_la_SOURCES = sharedObject.h sharedObject.c thing.c
sharedObject_la_LIBADD = ../utilities/libutil.la
如果您确实想要动态加载的
sharedObject.so
,您还需要:

sharedObject_la_LDFLAGS = -module
否则,应该调用目标
libsharedObject


顶级Makefile.am应该
子目录
,以便首先构建依赖项:


SUBDIRS=utilities executable sharedObject

在深入了解自动工具之前,我建议先看看CMake。我发现它比自动工具更容易使用。不过,如果你是以传统风格制作开源软件,那么autotools是可以期待的。谢谢Brett,我明天早上会试试的!