Побочные эффекты у функций в qmake можно делать при помощи функции export():
export(variablename) Exports the current value of variablename from the local context of a function to the global context.Один из примеров удачного, на мой взгляд, использования:
defineReplace(getBuildConfig) { __BUILD_CONFIG = "" if(contains(QMAKE_CFLAGS_RELEASE, "-MT") | contains(QMAKE_CFLAGS_DEBUG, "-MTd")) { __BUILD_CONFIG = mt } contains(QMAKE_SUBSYSTEM_SUFFIX, ",5\.01") { !isEmpty(__BUILD_CONFIG):__BUILD_CONFIG = $${__BUILD_CONFIG}_xp else: __BUILD_CONFIG = xp } CONFIG(debug, debug|release) { !isEmpty(__BUILD_CONFIG):__BUILD_CONFIG = $${__BUILD_CONFIG}_d else: __BUILD_CONFIG = d } return($$__BUILD_CONFIG) } defineTest(addLib) { __LIBNAME = $$1 __LIBTYPE = $$2 equals(__LIBTYPE, systemlib) { LIBS += -l$$__LIBNAME } else { __BUILD_CONFIG = $$getBuildConfig() !isEmpty(__BUILD_CONFIG):__LIBNAME = $$__LIBNAME-$$__BUILD_CONFIG LIBS += -l$$__LIBNAME } export(LIBS) }Функция getBuildConfig() определяет постфикс для библиотеки в зависимости от конфигурации среды окружения. Функция addLib() добавляет библиотеку в список LIBS по ее имени без постфикса. Вот пример части .pro файла без использования этих функций:
CONFIG(debug, debug|release) { LIBS += mylib-mt_xp_d } else { LIBS += mylib-mt_xp }Данный пример не учитывает того, что сборка может быть с динамическим рантаймом (MD/MDd), без использования toolset для XP и т. п., так как это может привести к значительному разрастанию кода. А теперь посмотрим пример с использованием ранее объявленных функций:
addLib(mylib)Файл проекта получается значительно более читабельным.
No comments:
Post a Comment