Qmake рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдХрд╛ рджрд░реНрдж рд░рд╣рд┐рдд рдХрдиреЗрдХреНрд╢рди

рдХреНрдпреВрдмреНрд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХреНрдпреВрдореЗрдХ рдкрд░ рдмреИрдареЗ рд╣реИрдВ (рдпрджрд┐ рд╣рдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реАрдПрдордХреЗ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдЪрд▓реЗ рд╣реИрдВ)ред рдФрд░, рд╢рд╛рдпрдж, рдЬреЛ рдХреЛрдИ рднреА рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рд╡рд╣ рдореБрдЭрд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рдЦреБрд╢реА рдФрд╕рдд рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрдорд╛рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реАред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреЛрд╕реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореБрдЭреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ рдХрд┐ рдиреАрдЪреЗ рдмрддрд╛рдИ рдЧрдИ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреА рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ qmake рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдПрдХ рдЧреЛрд▓-рдордЯреЛрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦреА рд╣реИред рджреВрд╕рд░реЗ, Qt 4 рдкрд░ рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдлреЗрд░рдмрджрд▓ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрдпреВрдЯреА 5 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рднреА - рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╡рд┐рдЪрд╛рд░


рдореЗрд░реЗ рд╕рднреА рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдирд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЪрд░ рдореЗрдВ рдЗрд╕ рдирд╛рдо рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛, MYLIBS рдЪрд▓реЛред рдЗрд╕ рддрд░рд╣:

MYLIBS += MyAwesomeLib 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
  1. рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдЙрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ, INCLUDEPATH рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
  3. рд╕реНрдереИрддрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреАрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдХреЛ рднреА рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рдВрдЧрдарди рдкрд░ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╣рдореЗрд╢рд╛ рд╢реИрдбреЛ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рддрдм рдореИрдВ рдПрдХ рд╕рдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд▓реНрдк рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕реБрд╡рд┐рдзрд╛ рд╕реЗрдЯрд┐рдВрдЧ


MYLIBS рдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (mkspes / features) рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЦрд░рд╛рдм рд╕реНрд╡рд╛рдж рд╣реИред рдореИрдВрдиреЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛: рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд░реЛрддреЛрдВ рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ .qmake.cache рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ (рдореЗрд░реА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ) рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде:

 #    ,       QMAKEFEATURES = D:/sources/sys/qmake/features 

рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдореИрдВрдиреЗ mylibs.prf рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ, рдЬрд┐рд╕рдореЗрдВ MYLIBS рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВ рд╣реИред MYLIBS рдЪрд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:

 CONFIG += mylibs 

mylibs.prf


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ MYLIBS рдЪрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП, рдлрд┐рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрджрд┐ред

 #      shadow build    __outpath = $$basename(OUT_PWD) MYLIB_CONFIG = $$section(__outpath, "-", 2) unset(__outpath) # -,     win32-msvc* { MYLIB_PREFIX = MYLIB_EXT = .lib } else { #mingw MYLIB_PREFIX = lib MYLIB_EXT = .a } #     defineReplace(registerStandardMyLib) { libTargetName = $$1 libFolder = $$2 MYLIB_PATH = $${libFolder}/build-$${libTargetName}-$${MYLIB_CONFIG}/bin/$${MYLIB_PREFIX}$${libTargetName}$${MYLIB_EXT} isEmpty(MYLIB_NESTED) { INCLUDEPATH += $${libFolder}/$${libTargetName}/include export(INCLUDEPATH) } isEqual(TEMPLATE, app) { LIBS += $${MYLIB_PATH} PRE_TARGETDEPS += $${MYLIB_PATH} export(LIBS) export(PRE_TARGETDEPS) } return($$MYLIB_PATH) } #       MYLIBS #       .pri   lib #   mylib.prf.   =  . #     ,    # .pri        MYLIBS. #     ,      . # 100   -   __iterlist = 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 AAA MYLIB_NESTED = __handled_libs = for(__iter, __iterlist) { isEqual(__iter, AAA) { error(MYLIBS: level of nesting limit is reached!) } __mylibs = $$unique(MYLIBS) __mylibs -= __handled_libs isEmpty(__mylibs): break() clear(MYLIBS) for(__mylib, __mylibs) { !exists($${PWD}/lib/$${__mylib}.pri) { error(Libary $$__mylib is not configured.) } include($${PWD}/lib/$${__mylib}.pri) __handled_libs += __mylib } MYLIB_NESTED = 1 } unset(__mylib) unset(__iter) unset(__iterlist) unset(__handled_libs) 


рджрд░рдЕрд╕рд▓, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрд╕реА рдирд╛рдо рдХреА .pri рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдХрд┐ рдлреАрдЪрд░ mylibs.prf рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд▓реАрдмреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдкреНрд▓рдЧрдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ qmake рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред

MyAwesomeLib.pri рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 MYLIB_PATH = D:/sources/libs/build-MyAwesomeLib-$${MYLIB_CONFIG}/bin/$${MYLIB_PREFIX}MyAwesomeLib$${MYLIB_EXT} #      INCLUDEPATH isEmpty(MYLIB_NESTED) { INCLUDEPATH += D:/sources/libs/MyAwesomeLib/include } #  -    isEqual(TEMPLATE, app) { LIBS += $${MYLIB_PATH} #     PRE_TARGETDEPS += $${MYLIB_PATH} } #  MyAwesomeLib   MyBeyondAwesomeLib,     MYLIBS += MyBeyondAwesomeLib 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдХреНрд░рд┐рдмрд▓ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рд░реВрдк рд╕реЗ рдЖрд▓рд╕реА рд╣реВрдВ рдФрд░ рдореЗрд░реА рд▓рдЧрднрдЧ рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рд╣реА рддрд░рд╣ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдореИрдВрдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░рд╕реНрдЯреИрдВрдбрд┐рд╡рд┐рдореНрдпрд▓рд┐рдм рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб mylibs.prf рдореЗрдВ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ рдореЗрд░реА .pri рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 $$registerStandardMyLib(MyAwesomeLib, D:/sources/libs) MYLIBS += MyBeyondAwesomeLib 

рд╡рд╣ рд╕рдм рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред

Source: https://habr.com/ru/post/In180959/


All Articles