0

我正在考虑在使用GNU Autotools构建的项目中使用log4cplus。对于其他库依赖项(例如 boost),我已经能够找到合理的规范 M4 宏来测试这些依赖项。

经过一番寻找,我仍然无法为 lib4cplus 找到类似的股票宏。我知道我可能会自己制作,但“标准”版本在可能的情况下更可取。有人知道吗?

4

2 回答 2

2

log4cplus 没有任何标准的 Autoconf 宏。如果你做了一些,我可以将它们添加到 log4cplus 包中。

虽然有一个pkg-configlog4cplus 文件。尝试使用它:

PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([log4cplus])
于 2012-07-22T06:51:31.597 回答
0

pkg-config鉴于1.0.4中明显缺乏支持,这就是我正在运行的内容。

我强烈建议未来的用户首先检查源代码库,因为那里提供的宏可能会看到社区支持,而这个版本不会。

# log4cplus.m4: Autoconf macro to test for the presence and version of lib4cplus.
#
# SYNOPSIS
#
#   LOG4CPLUS([MINIMUM-VERSION = 1.0.4])
#
# DESCRIPTION
#
#   Test for the presence and version of the log4cplus logging library.  Specifically, the
#   log4cplus/logger.h header must be present, and a test program must link.  The version check is
#   preprocessor comparison against LOG4CPLUS_VERSION in version.h.
#
#   If present, LOG4CPLUS_CPPFLAGS, LOG4CPLUS_LDFLAGS and LOG4CPLUS_LIBS affect preprocessor and
#   linker behavior.  If absent LOG4CPLUS_LIBS defaults to -llog4cplus.
#
#   If a suitable library is found, HAVE_LOG4CPLUS is defined.
#
# EXAMPLE
#
#     LOG4CPLUS([1.1.0])
#
AC_DEFUN([LOG4CPLUS], [
  # We need sed to turn 1.0.4 into 1, 0, 4 below
  AC_REQUIRE([AC_PROG_SED])

  # Declare the LOG4CPLUS_* variables as "precious"
  AC_ARG_VAR([LOG4CPLUS_CPPFLAGS], [preprocessor flags for log4cplus headers])
  AC_ARG_VAR([LOG4CPLUS_LDFLAGS], [linker flags for log4cplus])
  AC_ARG_VAR([LOG4CPLUS_LIBS], [libraries log4cplus])

  # Supply a default LOG4CPLUS_LIBS if needed
  AS_IF(
    [test "x$LOG4CPLUS_LIBS" = "x"],
    [LOG4CPLUS_LIBS=-llog4cplus])

  # In a cache block..
  AC_CACHE_VAL([log4cplus_cv_lib_log4cplus], [
    # Back up CPPFLAGS, LDFLAGS & LIBS, declare we'll be testing in C++
    save_CPPFLAGS="$CPPFLAGS"
    save_LDFLAGS="$LDFLAGS"
    save_LIBS="$LIBS"
    AC_LANG_PUSH([C++])

    # Append LOG4CPLUS_CPPFLAGS to CPPFLAGS if present
    AS_IF(
      [test "x$LOG4CPLUS_CPPFLAGS" != "x"],
      [CPPFLAGS="$CPPFLAGS $LOG4CPLUS_CPPFLAGS"])

    # Append LOG4CPLUS_LDFLAGS to LDFLAGS if present
    AS_IF(
      [test "x$LOG4CPLUS_LDFLAGS" != "x"],
      [LDFLAGS="$LDFLAGS $LOG4CPLUS_LDFLAGS"])

    # Append LOG4CPLUS_LIBS to LIBS if present
    AS_IF(
      [test "x$LOG4CPLUS_LIBS" != "x"],
      [LIBS="$LIBS $LOG4CPLUS_LIBS"])

    # If a minimum required version was specified, capture it in a variable.
    # If not, assume 1.0.4
    AS_IF([test "x$1" = "x"],
      [min_version=1.0.4],
      [min_version=$1])

    # Format the minimum version in a way suitable for the LOG4CPLUS_MAKE_VERSION macro
    min_version_commas=`echo $min_version | $SED -e 's/\./, /g'`

    # Now the checks.  Note that we try to avoid side-effects in this block, instead setting only
    # the cache variable.  Mutations come after.  First, can we find a header?
    AC_CHECK_HEADER([log4cplus/logger.h],
      # Can we link against the library?
      [AC_MSG_CHECKING([if log4cplus links])]
      [AC_LINK_IFELSE(
        [AC_LANG_PROGRAM(
          [[#include <log4cplus/logger.h>]],
          [[log4cplus::Logger logger]])],
        [AC_MSG_RESULT([yes])]
        # Is the present version new enough?
        [AC_MSG_CHECKING([if log4cplus is version compatible])]
        [AC_COMPILE_IFELSE(
          [AC_LANG_PROGRAM(
            [[#include <log4cplus/version.h>]], [[
            #if LOG4CPLUS_MAKE_VERSION(]$min_version_commas[) <= LOG4CPLUS_VERSION
            #else
              error: version check failed.
            #endif
            ]])],
          [AC_MSG_RESULT([yes])]
          [log4cplus_cv_lib_log4cplus=yes],
          [AC_MSG_RESULT([no])]
          [log4cplus_cv_lib_log4cplus=no])],
        [AC_MSG_RESULT([no])]
        [log4cplus_cv_lib_log4cplus=no])],
      [log4cplus_cv_lib_log4cplus=no])

    AC_LANG_POP([C++])
    CPPFLAGS="$save_CPPFLAGS"
    LDFLAGS="$save_LDFLAGS"
    LIBS="$save_LIBS"
  ])

  # Define HAVE_LOG4CPLUS if the check passed.
  AS_IF([test "x$log4cplus_cv_lib_log4cplus" = "xyes"],
    [AC_DEFINE([HAVE_LOG4CPLUS], [1], [Define to 1 if log4cplus is found])])
])
于 2012-07-23T05:41:04.640 回答