ما هي أسهل طريقة للرجوع إلى المكتبات في مشاريع QT؟

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

سؤال

لدي مشروعان للتطبيقات واجهة المستخدم الرسومية QT4 وواحد مشترك مشروع المكتبة ، جميع المشار إليها تحت ملف .pro مع قالب "subdirs". لذلك ، هو مثل:

  • exampleapp.pro
    • app1.pro
    • app2.pro
    • sharedlib.pro

الآن ، ما أريد القيام به هو المرجع المشترك من App1 و App2 بحيث في كل مرة أقوم فيها بتشغيل app1.exe ، لا يتعين علي نسخ مشاركات المشاركة يدويًا من مجلدها إلى App1.exe.

يمكنني تعيين متغير بيئة المسار في نافذة المشاريع ، لكن هذا ليس محمولًا للغاية. لقد بحثت في وضع متغير libs في ملف App1.Pro ، لكنني لست متأكدًا مما إذا كان ذلك يشير إلى المكتبات المرتبطة بشكل ثابت فقط - لقد جربته مع بناء الجملة المختلفة ولا يبدو أنه يعمل مع libs المشتركة .

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

المحلول

يمكنك تنظيم مشروعك على النحو التالي:

  • مشروع 1
    • سلة مهملات
    • ليب
    • app1
      • app2.pro
    • app2
      • app2.pro
    • مشترك
      • sharedlib.pro

في sharedlib.pro يمكن إضافة شيء مثل هذا:

TEMPLATE = lib
TARGET = sharedlibr
QT + = core \
      gui
DESTDIR = .. / lib

Destdir: يضمن نسخ نتيجة التجميع إلى الموقع ".. / lib"

بالنسبة للتطبيقات App1 و App2:

TEMPLATE = app
TARGET = app1
QT + = core \
      gui
DESTDIR = .. / bin

هذا فقط من أجل التطوير ، عند إنشاء المثبت ، يتم وضع المكتبات والتنفيذيين في dirs المناسبة ، اعتمادًا على نظام التشغيل.

نصائح أخرى

لإضافة إلى هذا (متأخر قليلاً!) ، يمكن للمرء استخدامه QMAKE_POST_LINK لنسخ الملفات حولها بعد الانتهاء من البناء. مثال:

defineReplace(formatpath) {
    path = $$1

    win32 {
        return(\"$$replace(path, "/", "\\")\")
    } else:unix {
        return($$replace(path, " ", "\\ "))
    } else {
        error("Unknown platform in formatpath!")
    }
}

win32:COPY_CMD = copy
unix:COPY_CMD = cp -P
macx:COPY_CMD = cp -R

win32:CMD_SEP = $$escape_expand(\n\t)
unix:CMD_SEP = ";"

win32:LIB_EXT = dll
unix:LIB_EXT = so*
macx:LIB_EXT = dylib

# Put here the directory of your library's build dir, relative to the current directory
# A path is given for example...
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin

QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top