PDA

View Full Version : کامپایل در لینوکس



Desaghi
سه شنبه 26 فروردین 1393, 08:45 صبح
مفهوم این دستور چیه؟

با این دستور برنامه کامپایل میشه ولی مفهوم (pkg-config --cflags num)$ را نمی دانم.


g++ -std=C++‎‎‎0x -c $(pkg-config --cflags num) sim.cpp

one hacker alone
سه شنبه 26 فروردین 1393, 16:15 عصر
سلام
خب ببینید دوست عزیز این اپشن هایی که به کامپایل وارد کردید رو براتون توضیح میدم احتمالا دارید gnome رو develop میکنید

خب اولین اپشن ما -std هست که میگه با کدوم استاندارد براتون کامپایل کنم
اگه یکم در سی++ عمیق مطالعه کرده باشید میدونید که نسخه های مختلفی داره و ما در اینجا میتونید مقدار های زیر رو به این اپشن بدیم
-std=iso9899:1990, -std=iso9899:1999,-std=gnu99,-ansi,....

اپشن دوم -c با خروجی کار داره و داره میگه که نمیخواد برای من کد رو به لینکر هم بدی و من فقط فایل object رو میخوام که پسوند خروجی در این حالت میش .o
pkg-config یک رابط حساب میشه بین کدی که الان میخوایم کامپایل کنیم و کتابخانه های نصب شده تو سیستم( مثلا شما از کتابخانه ی qt ,GTKو... در برنامه استفاده کردید)
cflags داره میگه متغییر داخل makefile داری و این به اونجا وصل میشه که در واقع در اینجا باید اسم و ورژن کتابخانه مشخص بشه (این موضوع بر میگرده به اصول نوشتن makefile در لینوکس)
اگه توضیحات ریزتر خواستی makefile رو هم بزار اینجا چون اون متغییر num داخل makefile تعریف شده و من چیزی ازش نمیبینم که براتون توضیح بدم
*نکته ی آموزشی: شما با تایپ دستور زیر میتونید لیست مسیرهای بسته GTK رو ببینید و یا هر کتابخانه ی دیگه ای

pkg-config --cflags gtk+-2.0
درپناه خدا باشید

Desaghi
سه شنبه 26 فروردین 1393, 20:25 عصر
ممنون از پاسخ مفیدتون

در شاخه ای که کد درش هست makefile نیست.

اصولا چطور با این دستور دنبال کتابخانه ای می گرده در حالیکه کتابخانه نصب(make install) نشده؟

دنبال چه makefile میگرده؟(من که مسیری براش تعریف نکردم )


آیا ( pkg-config --cflags num)$ یک متغییر تعریف شده در سیستم هست؟

one hacker alone
چهارشنبه 27 فروردین 1393, 19:09 عصر
اینکه در مسیر make فایل نیست بر میرگرده به پروژه شما شاید اصلا دارید یه برنامه رو نصب میکنید و نیاز به ./configure باشه یه ...
اما باید عرض کنم شما در لینوکس در زمان نصب کتابخانه هایی رو نصب کردید یعنی لینوکس نصب کرده چون برنامه هایی که در لینوکس هست از اون کتاخانه استفاده میکنه و قرار نیست شما کتابخانه ای رو هر سری نصب کنید اتفاقا فلسفه ی این دستور همینه که از شما ادرس کتابخانه ها رو بگیره تا در فرایند کامپایل چیزی کم نیاره
در مورد سوال اخرتون باید بگم نه متغییر تعریف شده در سیستم نیست