2012-03-18 485 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]