3

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

    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"在其他两个子项目的文件中指定它们。这些类型的项目间依赖关系是如何定义的?

两者都"executable""sharedObject.so"被安装。"util.o"和文件将"util.h"仅在构建过程中使用。

谢谢

4

1 回答 1

3

utilities/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,以便首先构建依赖项:

SUBDIRS = utilities executable sharedObject

于 2013-04-16T03:15:55.560 回答