اولا که من بگم والله من این دستور رو اجرا کردم و بدون هیچ پیغامی کامپایل کرد همین کد رو. دقت کنید که دستور رو دقیقا درست نوشته باشید. به ` هم دقت کنید.
اما این دستور چیکار میکنه.
g++ `pkg-config --libs --cflags gtk+-2.0` first.cpp -o firstقبل از هر چیز یه دستور رو امتحان کنید: همین چیزی که بین دوتا `` هست.
pkg-config --libs --cflags gtk+-2.0اجراش که بکنید احتمالا شبیه این نتیجه رو میبینید:
-DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0اینها سوییچهایی هستن که ++g بهشون احتیاج داره و از طریقشون میتونه بفهمه مثلا gtk.h رو کجا پیدا کنه. همینطور که میبینید توی خروجی این دستور نوشته شده:
-I/usr/include/gtk-2.0یه بخش دیگه از این سوییچها هم مربوط میشه به لایبرریهایی که برنامهی شما باید باهاشون لینک بشه. اینجا چون از +gtk استفاده میشه پس باید لایبرریش هم به برنامه لینک بشه.
حالا به جای اینکه بشینید تک تک لایبرریها و هدرهایی که توی برنامه استفاده کردید رو دستی جلوی ++g بنویسید میتونید از pkg-config استفاده کنید. اینطوری که با استفاده از دو تا `` خروجی pkg-config رو به عنوان آرگومان به ++g رد کنید. در نتیجه چیزی که واقعا اجرا میشه شبیه به این میشه:
g++ -DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include \
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 \
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 \
-I/usr/include/libpng12 -I/usr/include/pixman-1 \
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 \
-lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 first.cpp -o firstاین از این. حالا gtkmm چه فرقی با gtk معمولی داره. فرقشون اینه gtk شیءگرا نیست ولی gtkmm شیء گراست. همین. یعنی gtkmm اومده کلی کلاس و ویجت نوشته برای gtk که این کلاسا قابل ارثبری هستن و بقیهی امکاناتی که یه فریمورک شیء گرا در اختیار برنامهنویس میذاره. جز این هر دوتا یک کار انجام میدن.
مثلا همین برنامهای که شما نوشتی معادل gtkmmش میشه این:
#include <gtkmm.h>
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return 0;
}این برنامه به پکیج libgtkmm-2.4-dev احتیاج داره و باید با این دستور کامپایل بشه:
g++ `pkg-config --cflags --libs gtkmm-2.4` second.cpp -o secondبرای این برنامه هم خروجی دقیقا همون پنجرهایه که توی مثال شما ساخته میشه.
اطلاعات کاملتر رو میتونید از توی این کتاب آنلاین که توی سایت خود gtkmm هست پیدا کنید.
http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/index.htmlو آهان اگه پکیج devhelp رو نصب کنید بعدش میتونید پکیجهایی مثل libgtk2.0-doc و بقیهی پکیجهایی که داکیومنتیشن دارند رو نصب و استفاده کنید. devhelp یه برنامهس مخصوص دیدن این داکیومنتیشنها. امتحانش کنید. برای شروع برنامهنویسی با gtk خیلی میتونه مفید واقع بشه.
سوالی هست بازم در خدمتم.
