我正在尝试使用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
我无法弄清楚为什么需要该头文件的目标。
答案 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