mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-13 18:14:13 +02:00
4caefc048f
Building QET is dominated by re-parsing Qt's headers. A 214-line source file expands to roughly 198,000 preprocessed lines, and compiling one translation unit costs ~4.1 s, of which only ~0.35 s is optimisation -- switching -O3 to -O0 saves just 8%, so the usual "build Debug for faster compiles" advice does not help here. A precompiled header caches the parsed header state, which is the part that actually costs. Measured on a 24-thread Xeon E5-2650 v4 with Qt 5.15.18 and GCC 15.2, same build tree, only the option differing: compile one translation unit 4.12 s -> 1.21 s edit one .cpp -> linked binary 5.22 s -> 1.65 s Deliberately OFF by default. A PCH satisfies includes that a source file neglected to make for itself, so code written with it enabled can fail to compile for everyone else. Leaving the default off keeps CI and contributors on the strict behaviour; only developers who opt in trade that away for the speed. Two details in the implementation are load-bearing: - The generator expressions are not decoration. This target also compiles the 18 C files of the bundled LZMA decoder, and an unguarded header list applies to every language in the target, so the Qt headers would be fed to the C compiler and fail with "unknown type name 'namespace'". $<ANGLE-R> is needed because a literal '>' would end the generator expression. - target_precompile_headers() requires CMake 3.16 while the project still declares a 3.5 minimum, so the block warns and skips rather than raising the project-wide requirement for an opt-in developer feature. Verified both ways: with the option off no PCH artefacts are generated and the build is byte-for-byte the previous behaviour; with it on, all 18 C files still compile, the generated PCH is C++-only (cmake_pch.hxx, with no cmake_pch.h), the C compile commands carry no PCH, and the resulting binary runs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
50 lines
2.2 KiB
CMake
50 lines
2.2 KiB
CMake
# Copyright 2006 The QElectroTech Team
|
|
# This file is part of QElectroTech.
|
|
#
|
|
# QElectroTech is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# QElectroTech is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
message(" - developer_options")
|
|
|
|
# warn on *any* usage of deprecated APIs
|
|
add_definitions(-DQT_DEPRECATED_WARNINGS)
|
|
|
|
# You can make your code fail to compile if it uses deprecated APIs.
|
|
# In order to do so, uncomment the following line.
|
|
# disables all the APIs deprecated before Qt 6.0.0
|
|
#add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000)
|
|
|
|
# to enable function names and line numbers even for release builds
|
|
add_definitions(-DQT_MESSAGELOGCONTEXT)
|
|
|
|
# You can make your code warn on compile time for the TODO's
|
|
# In order to do so, uncomment the following line.
|
|
#add_definitions(-DTODO_LIST)
|
|
|
|
# Build with KF5
|
|
option(BUILD_WITH_KF5 "Build with KF5" ON)
|
|
|
|
# Precompiled headers for the Qt umbrella headers.
|
|
#
|
|
# Off by default and intended for local development only. Building QET is
|
|
# dominated by re-parsing Qt's headers: a 214-line .cpp expands to ~198,000
|
|
# preprocessed lines, and compiling one translation unit costs ~4.1 s of which
|
|
# only ~0.35 s is optimisation (-O0 instead of -O3 saves 8%). A PCH caches the
|
|
# parsed header state and takes that ~4.1 s down to ~1.2 s.
|
|
#
|
|
# It is deliberately NOT on by default: a PCH satisfies includes that a source
|
|
# file forgot to make itself, so code written with it enabled can fail to
|
|
# compile for everyone else. Leaving it off keeps CI and contributors on the
|
|
# strict behaviour, and only developers who opt in trade that for the speed.
|
|
option(QET_ENABLE_PCH "Use precompiled headers (developer build speed; may mask missing #includes)" OFF)
|