سؤال

أدركت أن سؤالي السابق كان مرتبكا قليلا بشأن القواعد والتبعية. يقوم ملف .pro التالي بإنشاء MICFFILE يعمل بشكل صحيح إذا كان الملفات المصدر الموجودة في الدليل الموجودة في الوقت الذي يعمل فيه Qmake.

idl.target   = generated/qmtest.h
idl.commands = code_generator 
idl.config   = no_link
idl.depends  = $$SOURCES $$HEADERS $$FORMS

TEMPLATE       = app
INCLUDEPATH    += generated
SOURCES        += generated/*.cpp
PRE_TARGETDEPS += generated/qmtest.h
QMAKE_EXTRA_UNIX_TARGETS += idl

ولكن عندما يدير Qmake، فإنها فقط توليد MICFILE، و Pre_Targetdeps & Qmake_extra_unix_targets لا تساعدني. كيف يمكنني الحصول على Qmake لإنشاء Makefile مما سيضيف محتويات المصادر التي تم إنشاؤها / إلى أخرى؟

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

المحلول

قد تحتاج إلى القيام بذلك في مرورين.

في ملف Qmake الخاص بك، أضف السطر التالي:

include( generated/generated.pri )

ثم، في نهاية البرنامج النصي Code_Generator الخاص بك، أضف المصادر إلى ملف Good.Pri (باستخدام Bash للمثال، ولكن الفكرة هي نفسها تقريبا لجميع اللغات):

rm generated/generated.pri
for file in $( ls generated/*.cpp ); do
    echo "SOURCES += ${file}" >> generated/generated.pri
done

في المرة الأولى التي تقوم فيها بتشغيل ملف Qmake، ولدت / تم إنشاؤها. من المفترض أن تكون فارغة. عند تشغيل جعل، سيقوم بملء ملف Good.Pri. في المرة الثانية، ستقوم بإعادة إنشاء ملف صنع (كمصدر) تم تغيير ملف .pri)، ثم ترجمة مرة أخرى. قد تكون قادرا على الكمان مع أوامر أخرى من شأنها أن تفعل المرحلة الثانية لك.

نصائح أخرى

كان لدي نفس المشكلة الآن فقط، ولكن بالنسبة ل USECASE أبسط من ملف واحد تم إنشاؤه فقط. لذلك، وجدت طريقة أبسط بكثير لتحقيق ذلك باستخدام Generated_Sources بدلا من المصادر:

dummyfile.target = dummy.cpp dommilfile.comMands = touch $$ dummyfile.target Qmake_extra_targets + = dummyfile generated_sources + = dommilfile.target

ربما يمكن للمرء أن يدفع ذلك إلى حلقة Qmake وإنشاء الأهداف المناسبة لملفات متعددة أيضا.

لقد حضرت حلا وأعتقد أنه قوي وعامة، يعتمد على qmake توليد mainsfile جنو.

قل لدينا كل ما اضافية SOURCES و HEADERS المهام في ملف اسمه Makefile.pri, ، والتي يتم إنشاؤها عن طريق تنفيذ البرنامج النصي generate_Makefile.pri.sh وهذا يولد أيضا المصادر و / أو رؤوس المذكورة في Makefile.pri.

نريد هذا الملف تلقائيا ومولد بشكل موثوق بواسطة نظام الإنشاء نفسه، حتى يتم تضمينه في .pro ملف، بحيث qmake يمكن أن تأخذ في الاعتبار محتواها وتوليد Makefile مع التبعيات الصحيحة.

هذا هو ثم ما علينا أن نضع لدينا .pro ملف.

Makefile_pri.target   = Makefile.pri
Makefile_pri.commands = generate_Makefile.pri.sh
Makefile_pri.depends  = FORCE

Makefile.target  = $$MAKEFILE
Makefile.depends = Makefile_pri

include($$Makefile_pri.target)

QMAKE_EXTRA_TARGETS = Makefile Makefile_pri

من هنا:

  1. إذا لم يكن هناك Makefile.pri, ، ثم يتم إنشاؤها؛
  2. إذا Makefile.pri يتم إنشاؤها أو تحديثها، ثم qmake يعمل مرة أخرى ويأخذ في الاعتبار محتواها، مما تجدد Makefile

كما قال هذا هل يعتمد على qmake توليد Makefile GNU، ولكن نفس النهج الذي أؤمن أنه يمكن تكييفه للعمل أيضا مع أنظمة البناء المستهدفة الأخرى.

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