اولا که من بگم والله من این دستور رو اجرا کردم و بدون هیچ پیغامی کامپایل کرد همین کد رو. دقت کنید که دستور رو دقیقا درست نوشته باشید. به ` هم دقت کنید.
اما این دستور چیکار میکنه.
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 خیلی میتونه مفید واقع بشه.
سوالی هست بازم در خدمتم.