Подход модуля работает хорошо. Если мне абсолютно нужен одиночный элемент, я предпочитаю подход Метакласса.
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls,*args,**kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
В файле проекта вы можете сделать что-то вроде этого
debug {
LIBS += -L./libfolder -lmydebuglib.lib
}
release {
LIBS += -L./libfolder -lmyreleaselib.lib
}
Бит внутри скобок отладки используется, если DEBUG был добавлен в переменную CONFIG qmake, аналогично то, что внутри скобок выпуска включено если RELEASE был добавлен в переменную CONFIG.
Вы также можете использовать "! debug" вместо "release" (т.е. когда отладка отсутствует в конфигурации)
Вы можете найти больше информации о qmake здесь .
Обычное
debug:LIBS += ...
else:LIBS += ...
решение ломается, когда пользователи наивно используют CONFIG + = debug
или CONFIG + = release
для переключения между отладочной и выпускной сборками ( и они это делают; никто не забыл сказать CONFIG - = release release_and_debug
до CONFIG + = debug
:).
Это канонический способ определения области видимости для debug
:
CONFIG( debug, debug|release ) {
# debug
QMAKE_LIBDIR += "path/to/debug/lib"
} else {
# release
QMAKE_LIBDIR += "path/to/release/lib"
}
Ср. документы qmake .
РЕДАКТИРОВАТЬ 2013-11-17 : Не используйте -Lfoo
в LIBS
. Канонический способ - добавить пути (без -L
) в QMAKE_LIBDIR
.