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,我明天早上会试试的!