كيفية تنسيق / تغيير qmake بناء الإخراج
سؤال
كيف يمكنني تنسيق إجراء الإخراج (!! من خلال تغيير ملف مشروع 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)