ключевое слово CONFIG += static что это ЗНАЧИТ?

static это один из ключевых слов переменной CONFIG . Но что это значит и как это работает в Qt?

Ответ можно найти только в содержании Makefile. Там есть такое на первый взгляд загадочный кусок кода:


Makefile: test_main.pro  ..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\win32-msvc2010\qmake.conf ..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\qconfig.pri \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\modules\qt_webkit_version.pri \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\qt_functions.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\qt_config.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\exclusive_builds.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\default_pre.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\default_pre.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\release.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\debug_and_release.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\default_post.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\default_post.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\static.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\console.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\rtti.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\exceptions.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\stl.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\embed_manifest_exe.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\embed_manifest_dll.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\warn_on.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\qt.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\win32\thread.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\moc.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\resources.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\uic.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\yacc.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\lex.prf \
		..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\include_source_dir.prf
	$(QMAKE) -spec ..\..\..\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\win32-msvc2010 CONFIG+=release -o Makefile test_main.pro

D:\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\static.prf появился у нас в результате команды CONFIG += static в файле ***.pro .

В теперь идем D:\QtSDK1.2.1\Desktop\Qt\4.8.1\msvc2010\mkspecs\features\static.prf и смотрим, что это значит :

CONFIG -= shared dll
contains(TEMPLATE, ".*lib"):{
    CONFIG += staticlib
    unix {
        QMAKE_CFLAGS += $$QMAKE_CFLAGS_STATIC_LIB
        QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STATIC_LIB
    }
}

mac {
    QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB
}

!static_and_shared:fix_output_dirs:fixExclusiveOutputDirs(static, shared)

То есть все элементарно Уотсон!