CONFIG(release, debug|release) { # We need fat object files when creating static libraries on some platforms # so the linker will know to load a particular object from the library # in the first place. With GCC, we have -ffat-lto-objects. MSVC # seems to work just fine. For other compilers, we disable LTCG # for static libraries. msvc { # Nothing to do } else: gcc { !clang:!intel_icc { static|fat-lto { QMAKE_CFLAGS_LTCG += -ffat-lto-objects QMAKE_CXXFLAGS_LTCG += -ffat-lto-objects } else { QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects } linux { # Get the number of online processors, like _SC_NPROCESSORS_ONLN isEmpty(QMAKE_NPROCESSORS_ONLN) { QMAKE_NPROCESSORS_ONLN = $$system("grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo 1") cache(QMAKE_NPROCESSORS_ONLN, set stash) } # Override LTO number of jobs QMAKE_LFLAGS_LTCG -= -flto QMAKE_LFLAGS_LTCG += -flto=$$QMAKE_NPROCESSORS_ONLN } } else: static { QMAKE_CFLAGS_LTCG = QMAKE_CXXFLAGS_LTCG = QMAKE_LFLAGS_LTCG = } # When doing link-time code generation, we need to pass the compiler # flags during linking stage too. This file is processed after # default_post.prf, so the QMAKE_CXXFLAGS already contains # QMAKE_CXXFLAGS_DEBUG or _RELEASE. use_c_linker { # use_c_linker.prf is in effect, use the C flags QMAKE_LFLAGS_LTCG += $$QMAKE_CFLAGS $$QMAKE_CFLAGS_LTCG QMAKE_LFLAGS_APP += $$QMAKE_CFLAGS_APP QMAKE_LFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB } else { QMAKE_LFLAGS_LTCG = $$QMAKE_CXXFLAGS $$QMAKE_LFLAGS_LTCG QMAKE_LFLAGS_APP += $$QMAKE_CXXFLAGS_APP QMAKE_LFLAGS_SHLIB += $$QMAKE_CXXFLAGS_SHLIB } } QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG QMAKE_LFLAGS *= $$QMAKE_LFLAGS_LTCG }