在makefile.am中执行shell命令

时间:2012-03-18 03:29:48

标签: autotools gtkmm pkg-config

我在./src中有以下Makefile.am,我需要为gtkmm应用程序生成依赖项。

bin_PROGRAMS = sampleapplication
sampleapplication_SOURCES = exampleapplication.cpp examplewindow.cpp main.cpp
sampleapplication_INCLUDES = ../include/exampleapplication.h ../include/examplewindow.h
sampleapplication_LDADD = $(DEPS_LIBS)

make_flags=`pkg-config gtkmm-3.0 --cflags --libs`
AM_CPPFLAGS = ${make_flags} -I$(top_srcdir)/include

然而,当我运行此命令时,我看到运行此命令时回显到屏幕的是:

g++ -DHAVE_CONFIG_H -I. -I..  `pkg-config gtkmm-3.0 --cflags --libs` -I../include   -g -O2 -MT exampleapplication.o -MD -MP -MF .deps/exampleapplication.Tpo -c -o exampleapplication.o exampleapplication.cpp
In file included from /usr/include/gtk-3.0/gtk/gtk.h:43:0,
                 from /usr/include/gtkmm-3.0/gtkmm/buildable.h:29,

这不会扩展我想要的方式。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

pkg-config包含有用的autoconf宏,它们在man页面上进行了描述。在configure.ac中使用类似的内容:

PKG_CHECK_MODULES([GTKMM], [gtkmm-3.0])

您现在可以在GTKMM_CFLAGS个文件中替换GTKMM_LIBSMakefile.am

答案 1 :(得分:2)

您可以在configure.ac

中添加此内容以及检查gtkmm

configure.ac

AC_MSG_CHECKING([for gtkmm-3.0])
if pkg-config gtkmm-3.0; then
    AC_MSG_RESULT([yes])
    GTKMM_CPPFLAGS=`pkg-config gtkmm-3.0 --cflags`
    GTKMM_LDFLAGS=`pkg-config gtkmm-3.0 --libs-only-other`
    GTKMM_LIBS=`pkg-config gtkmm-3.0 --libs-only-l`
    AC_SUBST(GTKMM_CPPFLAGS)
    AC_SUBST(GTKMM_LDFLAGS)
    AC_SUBST(GTKMM_LIBS)
else
    AC_MSG_RESULT([no])
fi

Makefile.am

sampleapplication_CPPFLAGS += @GTKMM_CPPFLAGS@
sampleapplication_LDFLAGS  += @GTKMM_LDFLAGS@
sampleapplication_LIBS     += @GTKMM_LIBS@