9ff1310af5
Instead of lumping both Objective-C (.m) and Objective-C++ (.mm) sources into the same pile, passing them on to the same compiler as for C++ (CXX), with the C++ flags (CXXFLAGS), we follow Apple's lead and treat them as variants of the C and C++ languages separately, so that Objective-C sources are built with CC and with CFLAGS, and Objective-C++ sources with CXX, and CXXFLAGS. This lets us remove a lot of duplicated flags and definitions from the QMAKE_OBJECTIVE_CFLAGS variable, which in 99% of the cases just matched the C++ equivalent. The remaining Objective-C/C++ flags are added to CFLAGS/CXXFLAGS, as the compiler will just ignore them when running in C/C++ mode. This matches Xcode, which also doesn't have a separate build setting for Objective-C/C++ flags. The Makefile qmake generator has been rewritten to support Objective-C/C++ fully, by not assuming that we're just iterating over the C and C++ extensions when dealing with compilation rules, precompiled headers, etc. There's some duplicated logic in this code, as inherent by qmake's already duplicated code paths, but this can be cleaned up when C++11 support is mandatory and we can use lambda functions. Task-number: QTBUG-36575 Change-Id: I4f06576d5f49e939333a2e03d965da54119e5e31 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
116 lines
3.8 KiB
Plaintext
116 lines
3.8 KiB
Plaintext
# This file is loaded by qmake right after loading the actual project file.
|
|
|
|
contains(TEMPLATE, ".*(lib|app)"):CONFIG += have_target
|
|
|
|
!have_target:!force_qt: CONFIG -= qt
|
|
|
|
load(resolve_config)
|
|
|
|
exclusive_builds: load(exclusive_builds_post)
|
|
|
|
# If the TARGET looks like a path, split it into DESTDIR and the resulting TARGET
|
|
target_dir_part = $$dirname(TARGET)
|
|
!isEmpty(target_dir_part) {
|
|
isEmpty(DESTDIR): \
|
|
DESTDIR = $$target_dir_part
|
|
else: \
|
|
DESTDIR = $$DESTDIR/$$target_dir_part
|
|
|
|
TARGET = $$basename(TARGET)
|
|
DESTDIR = $$clean_path($$DESTDIR)
|
|
}
|
|
|
|
QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH)
|
|
!isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ...
|
|
!static:release:have_target: \ # is it applicable?
|
|
!contains(TARGET, .*phony_target.*): \ # monster hack, you don't really see this here, right? ;)
|
|
system($$QT_BREAKPAD_ROOT_PATH/qtbreakpadsymbols --breakpad-exists) { # do we really have it?
|
|
CONFIG += breakpad force_debug_info
|
|
CONFIG -= no_debug_info separate_debug_info
|
|
}
|
|
|
|
force_debug_info|debug: \
|
|
CONFIG += debug_info
|
|
|
|
force_debug_info {
|
|
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
|
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
|
|
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
|
|
}
|
|
|
|
optimize_full {
|
|
!isEmpty(QMAKE_CFLAGS_OPTIMIZE):!isEmpty(QMAKE_CFLAGS_OPTIMIZE_FULL) {
|
|
QMAKE_CFLAGS_RELEASE -= $$QMAKE_CFLAGS_OPTIMIZE
|
|
QMAKE_CXXFLAGS_RELEASE -= $$QMAKE_CFLAGS_OPTIMIZE
|
|
QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE_FULL
|
|
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE_FULL
|
|
}
|
|
}
|
|
|
|
debug {
|
|
QMAKE_CFLAGS += $$QMAKE_CFLAGS_DEBUG
|
|
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
|
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG
|
|
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG
|
|
} else {
|
|
QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE
|
|
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE
|
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE
|
|
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
|
|
}
|
|
|
|
# disable special linker flags for host builds (no proper test for host support yet)
|
|
!host_build {
|
|
use_gold_linker: QMAKE_LFLAGS += $$QMAKE_LFLAGS_USE_GOLD
|
|
enable_new_dtags: QMAKE_LFLAGS += $$QMAKE_LFLAGS_NEW_DTAGS
|
|
}
|
|
|
|
dll:win32: QMAKE_LFLAGS += $$QMAKE_LFLAGS_DLL
|
|
static:mac: QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB
|
|
staticlib:unix {
|
|
QMAKE_CFLAGS += $$QMAKE_CFLAGS_STATIC_LIB
|
|
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STATIC_LIB
|
|
}
|
|
|
|
incredibuild_xge {
|
|
CONFIG -= incredibuild_xge
|
|
CONFIG = incredibuild_xge $$CONFIG
|
|
}
|
|
|
|
silent {
|
|
# Ensure that we process silent.prf last, as it will mangle QMAKE_CXX
|
|
# and friends in a way that some of the other features (sdk.prf and
|
|
# simd.prf eg) do not handle.
|
|
CONFIG -= silent
|
|
CONFIG = silent $$CONFIG
|
|
}
|
|
|
|
breakpad {
|
|
load(resolve_target)
|
|
DEBUGFILENAME = $$shell_quote($$system_path($$QMAKE_RESOLVED_TARGET))
|
|
PROJECTPATH = $$shell_quote($$system_path($$OUT_PWD))
|
|
|
|
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t)
|
|
QMAKE_POST_LINK = $$QMAKE_POST_LINK$$quote($${QT_BREAKPAD_ROOT_PATH}$${QMAKE_DIR_SEP}qtbreakpadsymbols $$DEBUGFILENAME $$PROJECTPATH)
|
|
!isEmpty(QMAKE_STRIP):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t)$$quote($$QMAKE_STRIP $$DEBUGFILENAME)
|
|
}
|
|
|
|
c++11|c++14|c++1z {
|
|
c++1z: cxxstd = CXX1Z
|
|
else: c++14: cxxstd = CXX14
|
|
else: cxxstd = CXX11
|
|
|
|
# Check if we should disable the GNU extensions or not
|
|
!strict_c++:!isEmpty(QMAKE_CXXFLAGS_GNU$$cxxstd): cxxstd = GNU$$cxxstd
|
|
|
|
QMAKE_CXXFLAGS += $$eval(QMAKE_CXXFLAGS_$$cxxstd)
|
|
QMAKE_LFLAGS += $$eval(QMAKE_LFLAGS_$$cxxstd)
|
|
|
|
unset(cxxstd)
|
|
}
|
|
|
|
!precompile_header: SOURCES += $$NO_PCH_SOURCES
|
|
|
|
QMAKE_INCDIR += $$QMAKE_INCDIR_POST
|
|
QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST
|