自动包含头文件目录Automake

问题描述 投票:0回答:1

我有一个Automake项目,它具有以下目录结构:

Makefile.am
src/
src/common
src/common/common.c
src/common/common.h
src/common/Makefile.am
src/mylib
src/mylib/mylib.c
src/mylib/mylib.h
src/mylib/Makefile.am

src/common/Makefile.am上有一个Libtool便利库目标:

noinst_LTLIBRARIES = libcommon.la
libcommon_la_SOURCES = common.c common.h

src/mylib/Makefile.am上有一个Libtool公共共享库目标:

lib_LTLIBRARIES = libmylib.la
libmylib_la_SOURCES = mylib.c mylib.h
libmylib_la_LIBADD = ../common/libcommon.la

现在我预计Automake足够聪明,可以自动添加到libmylib_la_CFLAGS -I指向common.h所在的目录,因为它依赖于libcommon.la

实际上是否有一种机制可以启用它(类似于CMake的INTERFACE_INCLUDE_DIRECTORIES)或者可能是一个变量(例如libcommon_la_HEADERS),它已经包含了属于libcommon便利库的所有标题?

我已经到处研究过,无法找到方法,而不是将-I ../common/直接添加到mylib CFLAGS。

cmake automake libtool
1个回答
0
投票

现在我期望Automake足够聪明,可以自动添加到libmylib_la_CFLAGS -I指向common.h所在的目录,因为它依赖于libcommon.la。

正如您所发现的,Automake不会自动执行此操作。

实际上是否有一种机制可以启用它(类似于CMake的INTERFACE_INCLUDE_DIRECTORIES)或者可能是一个已包含属于libcommon便利库的所有头的变量(例如libcommon_la_HEADERS)?

只写出变量是唯一的机制。如果你必须多次这样做,你可以使用包含文件或在AC_SUBST中使用configure.ac

请注意,在Automake中,通常将-I选项放入其中一个_CPPFLAGS变量中。而且,根据您的库所做的 - 特别是如果它生成任何头文件 - 您可能还想让它同时引用源代码树和构建树。结果可能如下:

libmylib_la_CPPFLAGS = -I$(srcdir)/../common -I../common
© www.soinside.com 2019 - 2024. All rights reserved.