سؤال

سير العمل الحالي الخاص بي:

  1. hg update (أو أي شيء يستخدمه المرء للتحقق من المراجعة)
  2. MyProject.proqmakeMyProject.vcproj
  3. افتح Visual Studio، قم بتحرير الملفات
  4. بناء المشروع

أثناء خطوة الإنشاء، كيف يمكنني تحديث ملفي config.h ملف رأس يحتوي على معلومات من نظام التحكم في الإصدار (على سبيل المثال. hg id)?

MyProject.vcproj يتم إنشاؤه بواسطة qmake, ، لذلك لا ينبغي لي تحريره يدويًا.

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

المحلول

يمكنك تنفيذ الأوامر الخارجية من داخل qmake.أسهل طريقة لإتاحة المعلومات في مصادرك هي استخدام تعريف:

HGID = $$system(hg id)
DEFINES += HGID=\\\"$$HGID\\\"

لست متأكدًا مما إذا كان بإمكانك تحرير ملف خارجي من qmake.يمكنك استخدام أداة خارجية، ولكن في نظام التشغيل Windows لا تتوفر عادةً أشياء مثل sed, ، لذلك قد يكون الأمر أكثر إشكالية بعض الشيء.

نصائح أخرى

يمكنك تحقيق ذلك باستخدام هدف بناء مخصص و PRE_TARGETDEPS الكلمة الرئيسية.على افتراض config.h.in لديه التنسيق التالي:

#define HGID $HGID

يمكنك تحديد هدف بناء مخصص سيتم معالجته hgid.h.in والإخراج إلى hgid.h قبل بناء هدفك الرئيسي على النحو التالي:

hgid.target = hgid
hgid.commands = sed s/\\\$$HGID/`hg id`/ hgid.h.in > hgid.h
QMAKE_EXTRA_TARGETS += hgid
PRE_TARGETDEPS += hgid

أحد الخيارات هو تمكين ملحق الكلمة الرئيسية.ضع شيئًا كهذا في hgrc الخاص بك (أو Mercurial.ini إذا كان هذا هو الشيء الذي تفضله):

[extensions]
hgext.keyword=

[keyword]
config.h =

[keywordmaps]
HGREV = {node}

ثم في ملف config.h ضع:

#define HGREV "$HGREV$"

قد تحتاج إلى تحليل القيمة السداسية من "$HGREV:deadbeefdeadbeef $" الذي ستحصل عليه، ولكن يمكن القيام بذلك بسهولة عن طريق أي رمز يصل إلى تعريف HGREV.

بالإضافة إلى تعليق Lukáš Lalinský وgoodrone، أود أن أذكر أن qmake يمكن أن يرتبط مباشرة بالنص، وليس فقط بمخرجاته.لذلك يمكن للمرء أن يقول

DEFINES += REPO_ID=\\\"`./setlocalversion.sh`\\\"

وسيتم تنفيذ البرنامج النصي حديثًا لكل هدف.

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