سؤال

كيف يمكنني تنسيق إجراء الإخراج (!! من خلال تغيير ملف مشروع Qmake فقط !!). تواصل خطوط التجميع الخاصة بي المتزايدة، والتحذيرات / الأخطاء / الأخطاء الواحدة تختفي تقريبا بينهما.

أنا أفكر في شيء مثل

$(CC) in.ext -o out.ext

شكرا فيما يتعلق

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

المحلول

في qmake, ، يمكنك إضافة خيار التكوين الصامت:

CONFIG += silent

(ملاحظة: أعتقد أن هذا هو الأمر. إنه شيء مشابه لهذا.)

والتي يجب أن تقمع معظم الإخراج، وطباعة الخطوط مثل "تجميع AO"، جنبا إلى جنب مع التحذيرات والأخطاء الخاصة بك. أعتقد أن هذا يشبه make.SILENT. التوجيه (أعتقد أن هذا هو واحد ...)

قد ترغب في أن تكون حذرا مع هذا، لأنها تقمع الكثير من المعلومات التي يخطئ المحللون فيها للاستخدام. على سبيل المثال، إذا كنت تجميع مع SUBDIRS التكوين، لن يطبع عند التغييرات في الدلائل المختلفة.

نصائح أخرى

هناك مناهج مختلفة. ويمكنك جعلها قابلة للتكوين.

  • اذا أنت يضيف @ إشارة أمام الخط داخل القاعدة، لن يتم طباعة الأمر نفسه، لكن إخراجه سوف.
  • اذا أنت يضيف -Werror لك CFLAGS متغير (لديك واحدة، أليس كذلك؟ إنها ممارسة شائعة!)، أنت بالتأكيد لن تفوت أي تحذير - سيتوقف البناء بعد الأول.
  • يمكنك إعادة توجيه الناتج القياسي لأمرك /dev/null, ، ترك دفق الأخطاء فقط (هذا ليس لعقليتك الخاصة، لأن دول مجلس التعاون الخليجي عادة لا تسفر عن الإخراج ولكن قد تكون مفيدة لأوامر أخرى).

لسوء الحظ، ل qmake ينطبق النهج الثاني فقط. أضف إلى ملف المشروع الخاص بك:

QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror

وسوف تستخدم المايعنات ولدت هذه الأعلام عند استدعاء التحويل البرمجي، وبالتالي فإن البناء سيتوقف عند كل تحذير.


(سيتم نقل هذا القسم إلى سؤال آخر بمجرد ظهور واحد).

بالنسبة للمعتاد، يمكنك استخدام كل شيء - يمكنك أن تجعل كل شيء قابل للتكوين! إليك المثال:

trace?=short

ifeq ($(trace),short)
  suppress_echo=@
  redirect_to_null=1>/dev/null

else ifeq ($(trace),full)
  suppress_echo=
  redirect_to_null=

else ifeq ($(trace),werror)
  CFLAGS+=-Werror

else
  $(error Incorrect trace type "$(trace)"!)
endif

# Thanks to Martin York for the source of this copy-pasted code
out.ext:  $(OBJ)
    @echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null)
    $(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null)

لذلك، إذا استدعيت make مثله:

$ make trace=full

سوف تطبع كل شيء. إذا استدعيت

$ make

ال short سيتم استخدام القيمة افتراضيا (لاحظ ?= المشغل بدلا من المعتاد =!) وسوف تتوسع القواعد إلى هذا الإصدار

out.ext: out.o
    @echo cc  -o out.ext 1>/dev/null
    @cc  -o out.ext out.o 1>/dev/null

ماذا سيعطي الكثير كما تحتاج.

هذا النهج، مع التكوين، يستخدم في رمز الإنتاج. على سبيل المثال، رأيتها في Ubuntu's Icedtea Makefiles.

يمكنك قمع النسخة المطبوعة مع "@" و ECHO ما تريد رؤيته:

مثال بسيط:

out.ext:  $(OBJ)
    @echo $(CC) -o out.ext
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top