سؤال

قررت أن أترك نظام Windows الخاص بي خلفه وأشغل الآن Debian كأنه نظام التشغيل الافتراضي. لقد قمت دائمًا بترميز Windows وتحديداً مع Visual Studio. أحاول حاليًا التعود على تجميع الكود الخاص بي تحت Linux.

على الرغم من أنه لا يزال لدي الكثير من الوثائق للقراءة ، ولا تتوقع أن تجعلكم يا رفاق سهلة للغاية بالنسبة لي ، إلا أنه لا يزال من الجيد الحصول على بعض المؤشرات على أين تبدأ. لدي بعض الأسئلة المحددة ، لكن لا تتردد في اقتراح/التوصية بأي شيء آخر فيما يتعلق بالموضوع.

  • ما هي الأدلة الموصى بها على إنشاء ملف صنع ، كيف يمكنني تجميع هذا Makefile (هل أدعو G ++ بنفسي ، هل أستخدم "Make"؟)
  • بالنظر إلى برنامج Linux الآخر ، يبدو أن لديهم دائمًا ملف "تكوين". بالضبط ما يفعل؟ هل تتحقق فقط مما إذا كانت المكتبات المطلوبة مثبتة أم أنها أكثر من مجرد التحقق من المتطلبات؟
  • كيف يمكنني ربط المكتبات ، وكيف يرتبط هذا بمعلمات Makefile أو G ++؟ في Windows ، سأقوم بتجميع المكتبة ، وتشمل بعض ملفات الرأس ، وأخبر الرابط الخاص بي عن ملف LIB إضافي للربط ، ونسخ ملف DLL. كيف بالضبط تعمل هذه العملية في Linux؟
  • توصيات لمحرري التعليمات البرمجية؟ أنا أستخدم حاليًا Nano وقد سمعت عن Vim و Emacs ، لكن لا أعرف ما هي فوائدها التي تتجاوزها بعضها البعض. هل هناك أي شخص آخر ، ولماذا أعتبرهم على أي من الثلاثة السابقة؟ ملاحظة: أنا لا أبحث عن IDE.

أي مساعدة ، وروابط إلى الأدلة والوثائق (ويفضل أن تكون تلك التي تهدف إلى المبتدئين) موضع تقدير كبير!

هل كانت مفيدة؟

المحلول

ما هي الأدلة الموصى بها على إنشاء ملف صنع ، كيف يمكنني تجميع هذا Makefile (هل أدعو G ++ بنفسي ، هل أستخدم "Make"؟)

أنت تبني من Makefile من خلال استدعاء "Make". وداخل Makefile الخاص بك ، تقوم بتجميع وربط باستخدام G ++ و LD.

بالنظر إلى برنامج Linux الآخر ، يبدو أن لديهم دائمًا ملف "تكوين". بالضبط ما يفعل؟ هل تتحقق فقط مما إذا كانت المكتبات المطلوبة مثبتة أم أنها أكثر من مجرد التحقق من المتطلبات؟

إنه برنامج نصي يستخدم عادةً لإعداد أشياء مختلفة بناءً على البيئة المستخدمة للبناء. في بعض الأحيان يكون مجرد برنامج نصي أساسي ، وفي أحيان أخرى ، يستدعي أدوات مثل AutoconF لاكتشاف ما هو متاح عند البناء. عادةً ما يكون البرنامج النصي "التكوين" مكانًا للمستخدم لتحديد أشياء اختيارية مختلفة ليتم بناؤها أو استبعادها ، مثل دعم الميزات التجريبية.

كيف يمكنني ربط المكتبات ، وكيف يرتبط هذا بمعلمات Makefile أو G ++؟ في Windows ، سأقوم بتجميع المكتبة ، وتشمل بعض ملفات الرأس ، وأخبر الرابط الخاص بي عن ملف LIB إضافي للربط ، ونسخ ملف DLL. كيف بالضبط تعمل هذه العملية في Linux؟

LD هو رابط GNU. يمكنك استدعاءها بشكل منفصل (وهو ما سينتهي به معظم Makefiles) ، أو يمكنك الحصول على مندوب G ++. تحدد الخيارات التي تنتقل إليها إلى G ++ و LD أين تبحث عن الرؤوس المشمولة والمكتبات لربطها وكيفية إخراج النتيجة.

توصيات لمحرري التعليمات البرمجية؟ أنا أستخدم حاليًا Nano وقد سمعت عن Vim و Emacs ، لكن لا أعرف ما هي فوائدها التي تتجاوزها بعضها البعض. هل هناك أي شخص آخر ، ولماذا أعتبرهم على أي من الثلاثة السابقة؟ ملاحظة: أنا لا أبحث عن IDE.

يعد Vim و Emacs محررين مرنين جدًا يدعمون مجموعة كاملة من الاستخدامات المختلفة. استخدم كل ما هو أفضل بالنسبة لك ، على الرغم من أنني أقترح أنك قد ترغب في عدد قليل من الأشياء الدنيا مثل تسليط الضوء على بناء الجملة.

نصائح أخرى

مجرد ملاحظة للذهاب مع إجابات مانديك.

عادةً ما يكون إنشاء الملفات باليد وسيلة غير قابلة للتحويل للغاية للبناء عبر متغيرات Linux Distro/UNIX. هناك العديد من أنظمة الإنشاء لتوليد تلقائي للإنشاء ملفات ، بناء بدون إنشاء ملفات. GNU Autotools, cmake, الرافعات, مربى, ، إلخ.

أيضا للذهاب أكثر بعمق حول التكوين.

  • الشيكات المتاحة المجمعين ، المكتبات ، بنية النظام.
  • تأكد من تطابق نظامك مع قائمة الحزمة المتوافقة المناسبة.
  • يتيح لك تحديد وسيطات سطر الأوامر لتخصصك ، وتثبيت المسار ، وحزم الخيارات ، إلخ.
  • تكوين ثم يقوم بإنشاء Makefile المناسب الخاص بنظامك.

ما هي الأدلة الموصى بها على إنشاء ملف صنع ، كيف يمكنني تجميع هذا Makefile (هل أدعو G ++ بنفسي ، هل أستخدم "Make"؟)

لقد تعلمت كيفية كتابة Makefiles من خلال قراءة GNU جعل يدويًا.

بالنظر إلى برنامج Linux الآخر ، يبدو أن لديهم دائمًا ملف "تكوين". بالضبط ما يفعل؟ هل تتحقق فقط مما إذا كانت المكتبات المطلوبة مثبتة أم أنها أكثر من مجرد التحقق من المتطلبات؟

عادة ما يرتبط ملف التكوين بـ Autotools. كما يوحي اسم البرنامج النصي ، فإنه يتيح لك تكوين البرنامج. من وجهة نظر المطور ، هذا يعني في الغالب تعيين وحدات الماكرو ، والتي تحدد المتغيرات ، والتي تتوفر المكتبات ، وما شابه. كما أنه يختبر توافر المكتبات. في النهاية ، يولد البرنامج النصي makefile GNU ، يمكنك استخدامه بعد ذلك لإنشاء البرنامج وتثبيته بالفعل.

نظام بناء GNU هو واحد فقط من بين العديد. لا أحب بشكل خاص نظام بناء GNU لأنه يميل إلى أن يكون أبطأ من غيره ، ويولد مجموعة قبيحة. بعض أكثرها شعبية cmake, ، مربى (تعزيز المربى قد تكون ذات أهمية لـ C ++) و WAF. بعض أنظمة البناء تولد ببساطة Makefiles ، بينما توفر البعض الآخر نظام بناء جديد تمامًا. بالنسبة للمشاريع البسيطة ، سيكون من السهل بالنسبة للمشاريع البسيطة التي تكتب Makefile باليد ، ولكن يجب أيضًا إجراء "التحقق من التبعية" (للمكتبات ، إلخ) يدويًا.

يحرر: براين جيانفوركارو كما أشار هذا.

سؤالك عامة بعض الشيء ، ولكن هنا ما أود أن أوصي به:

  • المحرر: VIM و EMACs شائعة. أكثر ما يهم ، كما هو الحال مع معظم الأدوات ، هو إتقان واحدة. أحب استخدام VIM لأن السادس (سليله) متاح في كل مكان ، لكن هذا قد لا يكون ذا صلة للغاية ، خاصة إذا بقيت على Linux. أي محرر برمجة بخير.

  • تكوين: ما لم تفعل مشاريع كبيرة ، لا تهتم بها. إنه كابوس لاستخدام وتصحيح. من المنطقي فقط إذا كنت تنوي توزيع مشروعك - في هذه الحالة ، اقرأ المكتب التلقائي: http://sources.redhat.com/autobook/. كما قال آخرون ، هناك بدائل (Cmake ، Scons ، إلخ ...). أنا معتاد تمامًا على كل من Scons و Autotools ، لكنني ما زلت أستخدم مشاريع Make (زوجين من الملفات).

فيما يتعلق بالمكتبة المشتركة: إنها تقريبًا مثل Windows ، باستثناء أنك تربط مع المكتبة المشتركة مباشرة - لا يوجد .lib vs .dll distinction في Linux. فمثلا. لمكتبة واحدة foo مع وظيفة foo:

int foo(void)
{
     return 1;
}

ستقوم ببنائه على النحو التالي:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

رئيسي (بالطبع في الحياة الحقيقية تضع واجهة برمجة التطبيقات في ملف الرأس):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

وبعد ذلك ، تربطه على النحو التالي:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

-L. هنا للقول إنك تريد أن يبحث الرابط في الدليل الحالي (على عكس Windows ، لا يتم ذلك أبدًا افتراضيًا في Linux) ، يقول -lfoo للربط مع المكتبة Foo.

حتى تبدأ في البدء ، سأوجهك أولاً إلى هذا يرشد بالنسبة إلى Makefiles ، فإنه يغطي أيضًا بعض الأشياء الربطية أيضًا.
إنه مجرد شيء قدمه أستاذ علوم الكمبيوتر في الجامعة ، لقد وجدته واضحًا ومفيدًا للغاية ومفيدًا للغاية.

أما بالنسبة إلى IDE ، فأنا أستخدم كسوف عادة لأنه يتعامل مع makefile كذلك. ناهيك عن التجميع والإخراج القياسي في متناول يدك في البرنامج.
كان مخصصًا بشكل أساسي لتطوير Java ، ولكن هناك مكون إضافي C/C ++ أيضًا!

أوصي الكتاب فن برمجة UNIX بواسطة ESR. ويغطي اختيار المحرر ولغة البرمجة ، وما إلى ذلك. كما أنه يعطي شعورًا جيدًا بالعقلية وراء البرمجة على UNIX أو Linux.

بالنسبة للمحررين ، ربما تريد إما vim أو emacs. كلاهما مختلفان وأيهما أفضل عن الذوق الشخصي أكثر من أي شيء آخر. أنا استخدم vim. إنه لأمر رائع أن يتحرك بسرعة حول الكود وإجراء التغييرات. لم يعجبني emacs كثيرًا ولكن الكثير من الناس يفعلون ذلك. Emacs قابلة للتمديد للغاية ويمكن استخدامها في كل شيء من قارئ الأخبار إلى IDE. جرب كليهما وشاهد ما تحب.

  • توصيات لمحرري التعليمات البرمجية؟ أنا أستخدم حاليًا Nano وقد سمعت عن Vim و Emacs ، لكن لا أعرف ما هي فوائدها التي تتجاوزها بعضها البعض. هل هناك أي شخص آخر ، ولماذا أعتبرهم على أي من الثلاثة السابقة؟ ملاحظة: أنا لا أبحث عن IDE.

إذا كنت تستخدم Linux مع Manager Window (KDE ، Gnome ، إلخ) ، فيمكنك أيضًا التفكير في استخدام محرر النصوص القياسي لمدير النافذة الخاص بك. الفائدة الرئيسية التي ستحصل عليها على VIM/EMACS/Nano هي أنه يبدو أكثر دراية بالواحد القادم من بيئة Windows - محرر مكتوب لتشغيله على Window Manager يحتوي ، والكثير من الميزات الأنيقة الأخرى التي ربما لا يمكن لمحرري وحدة التحكم مطابقة. (على الرغم من أن Emacs و Vim متطورة جدًا هذه الأيام ، فمن يدري ؛-ب)

على kde (وهو ما أستخدمه) يمكنني أن أوصي بـ Kwrite ، وهو محرر نصوص جيد الميزة ولكنه أساسي إلى حد ما مع تسليط الضوء على بناء الجملة ؛ أو Kate ، وهو محرر نصية مربي مع بعض الميزات الإضافية: إدارة الجلسة ، لوحة طرفية مدمجة ، الاحتجاج التلقائي لـ make, ، والعديد من المكونات الإضافية بما في ذلك مشاهد رمز C/C ++. عادةً ما أستخدم Kate لعملي C ++ عندما لا أريد أن أزعجك بإعداد مشروع IDE الكامل. (لمعلوماتك IDE لـ KDE هو KDEvelop)

توصيات لمحرري التعليمات البرمجية؟ أنا أستخدم حاليًا Nano وقد سمعت عن Vim و Emacs ، لكن لا أعرف ما هي فوائدها التي تتجاوزها بعضها البعض. هل هناك أي شخص آخر ، ولماذا أعتبرهم على أي من الثلاثة السابقة؟ ملاحظة: أنا لا أبحث عن IDE.

السادس وإياماك هما محرري UNIX المثاليين. إذا تم تعيينك على استخدام محرر نصية بدلاً من IDE ، فإن أحدهم أو مشتقاتها (VIM ، XEMACS ، إلخ) هو الطريق للذهاب. كلا الداعمين لإبراز بناء الجملة وجميع أنواع الميزات ، إما بشكل افتراضي أو عبر الامتدادات. أفضل جزء في هؤلاء المحررين هو التوسع الذي يقدمونه ؛ emacs عبر مجموعة متنوعة من lisp ، و vim عبر لغة البرمجة النصية الخاصة بها.

أنا شخصياً أستخدم emacs ، لذلك لا أستطيع أن أقول الكثير عن VIM ، ولكن يجب أن تكون قادرًا على العثور على الكثير من المعلومات حول كلاهما عبر الإنترنت. لدى Emacs العديد من البرامج التعليمية والمراجع الجيدة ، بما في ذلك هذا.

تحرير [ديسمبر 2014]: يبدو أن هناك اتجاه المحررين عبر الأنظمة الأساسية وقابلة للتمديد للغاية مؤخرًا. قد يكون هذا اختيارًا جيدًا إذا كنت ترغب في شيء أقل من IDE ، ولكنه أكثر رسومية من VI/EMACs والانتعاش الأصلي عبر منصات متعددة. أوصي بالبحث في سامية أو ذرة; ؛ كل من هذه العمل عبر Windows/Linux/Mac ولديها مجتمعات رائعة من الإضافات والموضوعات.

المسافة بين استدعاء G ++ مباشرة واستخدام سلسلة بناء Autotools ضيقة جدا. كن جيدًا في Autotools ، وهو في الحقيقة أقرب شيء إلى "مشروع" متاح في عالم Linux/Open Source.

بالنسبة لشخص قادم من Visual Studio ، قد تبدو كل أشياء سطر الأوامر هذا غامقًا وفوضويًا. قبل أن تتحول إلى قذيفة باش/vim/emacs junkie ، جرب بعض الأدوات القائمة على واجهة المستخدم الرسومية أولاً حتى يكون لديك بعض وقت الانتقال ...

  • QT 4.5 مع QT Creator mini-ide. هذا هو أفضل إطار ، Lightyears قبل المنافسة.
  • Eclipse (C ++) - من تجربتي مع هذا على Windows ، أجد أنه مذهل (ربما يكون هذا أفضل تطبيق Java مكتوب على الإطلاق)
  • Kdevelop
  • أنجوتا
  • إذا كنت تستخدم Delphi ، فإن Lazarus/Freepascal هو بديل جيد.

أنا متأكد من أن الطيران الطويل سوف يسخر ويدعي أن Vim أو Emacs يمنحهم أفضل وأسرع بيئة تنمية ، ولكن السكتات الدماغية المختلفة لأشخاص مختلفين. سيستغرق شخص ما اعتاد على IDE بعض الوقت للتبديل أو قد لا يرغب في التبديل على الإطلاق. على الرغم من كل براعة التحرير ، فإن إنشاء تطبيقات واجهة المستخدم الرسومية ليس بالتأكيد وظيفة لأدوات 80 × 25. يستغرق الأمر سنوات لتصبح خبيرًا في جانب سطر الأوامر من الأشياء ، وهو أكثر من مجرد تحول في العالم أكثر من أي شيء آخر.

كملاحظة جانبية بين الإجابات المناسبة هنا .. في حال كنت تريد أن تضغط على الأرض كرجل Windows ، أقترح الجديد الجديد QT SDK. سيشعر وكأنه المنزل :-)

أنصح باستخدام Scons بدلاً من ذلك ، إنه يقوم بنفس المهمة ، لكن من الأسهل استخدامها والتعامل معها من خلال صنع المكتبات الديناميكية ، التبعيات ، وما إلى ذلك.

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

كمحرر نصوص ، أنا سعيد مع Jedit للترميز ، لكنها مسألة ذوق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top