我有一个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。
现在我期望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