include_HEADERS并没有'all-am'所需的目标规则

时间:2015-11-20 23:37:58

标签: c makefile

我正在尝试使用autotools编译库。该库在源目录库/ src

中使用以下Makefile.am进行编译
lib_LTLIBRARIES = libgtkchart.la

libgtkchart_la_CFLAGS = $(CFLAGS) -fPIC -Wall $(gtk_CFLAGS) 
libgtkchart_la_LIBADD =  $(gtk_LIBS) $(glib_LIBS)
libgtkchart_la_LDFLAGS = -fPIC -shared -version-info 1:0:0
libgtkchart_la_SOURCES = gtkchart.c gtkaxis.c gtkbarchart.c gtkchartdata.c gtkchart.h gtkaxis.h gtkbarchart.h gtkbarchartdata.h

但如果我将以下行添加到该文件中:

include_HEADERS = gtkaxis.h gtkbarchart.h gtkbarchartdata.h gtkchart.h

我收到以下错误:

make[2]: *** No rule to make target 'gtkbarchartdata.h', needed by 'all-am'.  Stop.

我在库中的主要MAkefile.am是

SUBDIRS = src
ACLOCAL_AMFLAGS= -I m4

我的configure.ac是

AC_CONFIG_MACRO_DIRS([m4])
AC_INIT([library], [1.0], [me])
AM_PROG_AR
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([ 
Makefile
src/Makefile
])
LT_INIT
AC_OUTPUT

我无法弄清楚为什么需要该头文件的目标。

1 个答案:

答案 0 :(得分:0)

  

将标题文件分配给extern HANDLE std_con_out; 时,必须使用automake   能够找到标题。

例如,如果您有以下目录结构:

include_HEADERS

gtkbarchartdata.h位于GTKBarCharDataDirectory目录中,然后您需要将include_Headers更改为:

src
   Makefile.am
   GTKBarCharDataDirectory
   SomeOtherDirectory
   gtkaxis.h
   gtkbarchart.h
   gtkchart.h

使用include_Headers变量时,必须知道头文件的相对路径。这是因为HEADER变量系列与SOURCES变量系列的工作方式不同。

  如果列出不存在/未找到的头文件,

automake将不会失败   在libgtkchart_la_SOURCES变量中,因为include_HEADERS = gtkaxis.h gtkbarchart.h GTKBarCharDataDirectory/gtkbarchartdata.h gtkchart.h

检查herehere以获取参考资料