ما هي أفضل طريقة لإدراج الإصدار والمعلومات القوس في مصادر C ++؟

StackOverflow https://stackoverflow.com/questions/2096709

سؤال

أريد أن يتضمن برنامج C ++ خيار "–version" الذي يتسبب في طباعة:

  • الهندسة المعمارية التي تم تجميعها
  • إصدار المصدر (على سبيل المثال ، v0.1.0)
  • اسم التطبيق

أنا أيضًا أستخدم AutoConf/Automake لأول مرة ، وألاحظ أن التكوين. AC لديه كل من الثنائي والنسخة. لا تحتوي حاليًا على معلومات هندسة هندسة ، ولا أريد إضافة مثل هذه المعلومات ، لأنني سأقوم بالتجميع تحت أقواس متعددة.

هل هناك طريقة سهلة لأتمتة إدخال معلومات الإصدار/القوس/appname في ملف أو ملف مصدر؟ كيف يفعل معظم المبرمجين C ++ هذا؟

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

المحلول

يمنحك AutoConf config.h, التي توفر وحدات الماكرو للسلسلة مثل PACKAGE, PACKAGE_NAME, PACKAGE_STRING, PACKAGE_VERSION, ، و VERSION.

(عندما أستخدم argp محلل الحجة ، أنا ببساطة أستخدم

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <argp.h>
const char *argp_program_version = PACKAGE_STRING;
const char *argp_program_bug_address = PACKAGE_BUGREPORT;
/* et cetera */
int main(int argc, char **argv) {
    error_t argp_result = argp_parse(&argp, argc, argv, 0, 0, NULL);
    if (argp_result) return argp_result;
    /* et cetera */
}

وثم --help, --version, ، إلخ. فقط العمل تلقائيًا.)

يمكنك أيضا إضافة

AC_CANONICAL_HOST
AC_DEFINE_UNQUOTED([CHOST], ["$host"], [Canonical host])
AC_CANONICAL_BUILD
AC_DEFINE_UNQUOTED([CBUILD], ["$build"], [Canonical build])
AC_CANONICAL_TARGET
AC_DEFINE_UNQUOTED([CTARGET], ["$target"], [Canonical target])

لك configure.ac, ، إذا كنت تريد الحصول على وحدات الماكرو للسلسلة في config.h جدا. هذه عادة ما تكون سلاسل للنموذج $arch-$vendor-$kernel-$libc, ، أين
CHOST هي المنصة التي سوف يجري البرنامج بعد أن تم بناؤه ،
CBUILD هي المنصة التي تقوم حاليًا ببناء البرنامج ، و
CTARGET هو النظام الأساسي الذي سيعمل عليه البرنامج.
(هذه هي نفسها إلا إذا كنت متشابكًا أو تقوم ببناء مخطط أدوات متقاطع.)

نصائح أخرى

اكتب نصًا Python يقوم بإنشاء ملف مصدر الإصدار الخاص بك. ثم اجعلها تعمل بأي شيء برامج نصية/أداة تستخدمها.

اختر قاعدة لإعادة كتابة ملف الإصدار فعليًا وفرضه في البرنامج النصي Python: إنه يعتمد حقًا على نوع المشروع وإصدار مؤسسة تقوم به.


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

لكن في الكثير من أعمال الوظائف ، استخدمت برنامج نصي قام بإنشاء ملف الإصدار ولكن فقط إذا أردت ذلك. ذلك لأن فريق DEV قرر عندما كان إصدار معين "إصدارًا".

اقترحت استخدام البرنامج النصي Python لأن Python يعمل على جميع منصات التطوير وهو قوي وسهل حقًا عندما يتعلق الأمر بمعالجة الملفات النصية. يمكن بعد ذلك استدعاؤه بواسطة أي نظام بناء (Visual Studio ، Cmake ، وما إلى ذلك) التي تستخدمها.

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