什么是Noinst_libfoo_ladir中的Ladir

What is ladir in noinst_libfoo_ladir?

本文关键字:中的 Ladir ladir libfoo Noinst 什么      更新时间:2023-10-16

我创建了一个名为foo的示例项目,其 configure.ac is:

AC_PREREQ([2.69])
AC_INIT([foo], [1.0.0], [a@a.a])
AC_CONFIG_SRCDIR([foo.cpp])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign])
LT_INIT
AC_PROG_CXX
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

及其 makefile.am 是:

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.cpp
noinst_libfoo_la_DATA = test

运行autoreconf -i时,我得到:

makefile.am:3:错误:'noinst_libfoo_la_data'已使用但 'Noinst_libfoo_ladir'是不确定的。

什么是noinst_libfoo_ladir?我似乎找不到有关此的文档。

您的问题是该行,如错误:

中所示
noinst_libfoo_la_DATA = test

自动制品在决定如何构建时处理这些变量后缀。请注意,以_DATA结尾的后缀不是其中之一。但是,它确实将_DATA识别为安装在一个位置中(例如,data_DATA安装在datadir中)。因此,将安装noinst_libfoo_la_DATA的位置将在变量noinst_libfoo_ladir中,其定义不存在于makefile.am中,因此错误。

所以ladir什么都不是。它只是用dir的CC_11后缀,试图找到一个未定义的变量。应用于data_DATA的相同过程将是data(脱条off _DATA后缀) dir = datadir。为了不出现错误,您需要定义类似:

noinst_libfoo_ladir = $(datadir)/libfoo

在makefile.am中。我称其为其他东西,因为noinst_前缀对Autotools中的其他事物具有特殊的含义(不要安装)。