2012-03-18 480 views
1

我在./src里面有以下Makefile.am,我需要为gtkmm应用程序生成依赖关系。在makefile.am中执行shell命令

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, 

这并不扩大了我想要的方式。什么是正确的方法来做到这一点?

+0

如果您在生成'Makefile.in'时得到标志,它将是_your_系统特有的标志,而不是以后将在_his_系统上使用'Makefile.in'的用户。 – 2012-03-18 03:38:11

+0

这是什么正确的方法呢?我刚开始学习如何使用autotools编写构建系统。 – 2012-03-18 03:40:49

+2

我可能会把它放在'configure.ac'中,尤其是检查gtkmm-3.0是否可用。 – 2012-03-18 03:48:32

回答

3

pkg-config包括有用Autoconf宏,这是本man页所述。在configure.ac使用类似:

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

你现在有GTKMM_CFLAGSGTKMM_LIBS可用于取代在Makefile.am文件。

+0

也在gtkmm手册的第1页中进行了介绍。没有人再阅读手册吗? :-) – ergosys 2012-03-18 17:27:27

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 += @[email protected] 
sampleapplication_LDFLAGS += @[email protected] 
sampleapplication_LIBS  += @[email protected]