C++ links: Building, Build Systems, and Build Performance Optimization
See also:
- Build Systems à la Carte
- Microsoft Research 2018
- Andrey Mokhov, Neil Mitchell, Simon Peyton Jones
- https://www.microsoft.com/en-us/research/publication/build-systems-la-carte/
- https://github.com/snowleopard/build
- https://blogs.ncl.ac.uk/andreymokhov/the-task-abstraction/
- https://blogs.ncl.ac.uk/andreymokhov/build-systems-a-la-carte/
- https://icfp18.sigplan.org/event/icfp-2018-papers-build-systems-a-la-carte
- https://www.youtube.com/watch?v=BQVT6wiwCxM
- Build System Rules and Algorithms
- Mike Shal (2009)
- http://gittup.org/tup/build_system_rules_and_algorithms.pdf
- Build System Partial Updates - http://gittup.org/blog/2014/09/11-build-system-partial-updates/
- Clobber Builds - Mike Shal
- Part 1 - Missing Dependencies - http://gittup.org/blog/2014/03/6-clobber-builds-part-1---missing-dependencies/
- Part 2 - Fixing Missing Dependencies - http://gittup.org/blog/2014/05/7-clobber-builds-part-2---fixing-missing-dependencies/
- Part 3 - Other Clobber Causes - http://gittup.org/blog/2014/06/8-clobber-builds-part-3---other-clobber-causes/
- Part 4 - Fixing Other Clobber Causes - http://gittup.org/blog/2015/03/13-clobber-builds-part-4---fixing-other-clobber-causes/
- Correct, Efficient, and Tailored: The Future of Build Systems
- IEEE Software, vol. 35, no. 2, 2018
- G. Maudoux and K. Mens
- https://doi.ieeecomputersociety.org/10.1109/MS.2018.111095025
- The C++ Build Process Explained
- Caching Function Calls Using Precise Dependencies
- Programming Language Design and Implementation (PLDI) 2000
- Allan Heydon, Roy Levin, Yuan Yu
- http://www.vestasys.org/doc/pubs/pldi-00-04-20.pdf
- Vesta Configuration Management System - http://www.vestasys.org/#publications
- cHash: Detection of Redundant Compilations via AST Hashing
- USENIX Annual Technical Conference 2017
- Christian Dietrich, Valentin Rothberg, Ludwig Füracker, Andreas Ziegler, Daniel Lohmann
- https://www.usenix.org/conference/atc17/technical-sessions/presentation/dietrich
- cHash Compiler Plugins and related tools - https://github.com/luhsra/chash
- Detecting Incorrect Build Rules
- International Conference on Software Engineering (ICSE) 2019
- Nandor Licker, Andrew Rice
- https://2019.icse-conferences.org/details/icse-2019-Technical-Papers/82/Detecting-Incorrect-Build-Rules
- https://www.repository.cam.ac.uk/handle/1810/288468
- mkcheck: Incremental Build Verification
- Oops, My Tests Broke the Build: An Explorative Analysis of Travis CI with GitHub
- Mining Software Repositories (MSR) 2017
- M. Beller, G. Gousios, A. Zaidman
- http://www.gousios.gr/pub/tests-broke-build-explorative-analysis-travis-ci-github.pdf
- https://www.slideshare.net/inventitech/oops-my-tests-broke-the-build-an-explorative-analysis-of-travis-ci-with-github
- Programmers’ Build Errors: A Case Study (at Google)
- International Conference on Software Engineering (ICSE) 2014
- Hyunmin Seo, Caitlin Sadowski, Sebastian Elbaum, Edward Aftandilian, Robert Bowdidge
- https://research.google.com/pubs/pub42184.html
- Automatic Object Linkage, with Include Graphs (Source code sharing without static libraries)
- 2018; Thomas Young
- https://upcoder.com/19/automatic-object-linkage-with-include-graphs
- Build Predictor: More Accurate Missed Dependency Prediction in Build Configuration Files
- Computer Software and Applications Conference (COMPSAC 2014)
- Bo Zhou, Xia Xin, David Lo, Xinyu Wang
- http://www.mysmu.edu/faculty/davidlo/papers/compsac14-dependency.pdf
- https://www.semanticscholar.org/paper/Build-Predictor%3A-More-Accurate-Missed-Dependency-in-Zhou-Xia/a4d4b05c8594fc7358a89f0afffb7e405b65fa0d
- Program Repository
- LLVM with Program Repository Support - https://github.com/SNSystems/llvm-project-prepo
- Program Repository: What’s the Idea?
- Early Overview
- Toy programming demo of a repository for statically compiled programs
- 2016 US LLVM Developers' Meeting; Paul Bowen-Huggett
- https://llvm.org/devmtg/2016-11/Slides/Bowen-Hugett-ToyProgrammingDemo.pdf
- https://youtu.be/-pL94rqyQ6c
- Targeting a statically compiled program repository with LLVM
- 2019 EuroLLVM Developers’ Meeting; Phil Camp , Russell Gallop
- https://www.youtube.com/watch?v=mlQyEBDnDJE
- http://llvm.org/devmtg/2019-04/slides/Lightning-Camp-Program_Repo.pdf
- LLVM Build Times Using a Program Repository
- Compile Faster with the Program Repository and ccache
- 2020 European LLVM Developers Meeting; Ying Yi, Paul Bowen-Huggett
- http://www.llvm.org/devmtg/2020-04/talks.html#LightningTalk_51
- mtime comparison considered harmful
- "tl;dr: Rebuilding a target because its mtime is older than the mtimes of its dependencies, like make does, is very error prone. redo does it better, and so can you."
- https://apenwarr.ca/log/20181113
- Non-recursive Make Considered Harmful
- Proceedings of the 9th International Symposium on Haskell, 2016
- Andrey Mokhov, Neil Mitchell, Simon Peyton Jones, Simon Marlow
- https://www.microsoft.com/en-us/research/publication/non-recursive-make-considered-harmful/
- https://simonmar.github.io/bib/shake-2016_abstract.html
- Recursive Make Considered Harmful
- Journal of AUUG Inc, 19(1):14–25, 1998
- Peter Miller
- http://aegis.sourceforge.net/auug97.pdf
- http://sites.e-advies.nl/nonrecursive-make.html
- Build in the Cloud
- Accessing Source Code: http://google-engtools.blogspot.com/2011/06/build-in-cloud-accessing-source-code.html
- How the Build System works: http://google-engtools.blogspot.com/2011/08/build-in-cloud-how-build-system-works.html
- Distributing Build Steps: http://google-engtools.blogspot.com/2011/09/build-in-cloud-distributing-build-steps.html
- Distributing Build Outputs: http://google-engtools.blogspot.com/2011/10/build-in-cloud-distributing-build.html
- CloudBuild: Microsoft’s Distributed and Caching Build Service
- International Conference on Software Engineering (ICSE) 2016
- Hamed Esfahani, Jonas Fietz, Qi Ke, Alexei Kolomiets, Erica Lan, Erik Mavrinac, Wolfram Schulte, Newton Sanches, Srikanth Kandula
- https://dl.acm.org/citation.cfm?id=2889222
- https://www.microsoft.com/en-us/research/publication/cloudbuild-microsofts-distributed-and-caching-build-service/
- From Laptop to Lambda: Outsourcing Everyday Jobs to Thousands of Transient Functional Containers
- 2019 USENIX Annual Technical Conference
- Sadjad Fouladi, Francisco Romero, Dan Iter, Qian Li, Shuvo Chatterjee, Christos Kozyrakis, Matei Zaharia, Keith Winstein
- https://www.usenix.org/conference/atc19/presentation/fouladi
- Outsourcing Everyday Jobs to Thousands of Cloud Functions with gg
- gg: The Stanford Builder
- A Sound and Optimal Incremental Build System with Dynamic Dependencies
- SPLASH 2015 OOPSLA
- Sebastian Erdweg, Moritz Lichter, Manuel Weiel
- https://www.youtube.com/watch?v=QsgLSDMLLTo
- https://2015.splashcon.org/event/oopsla2015-a-sound-and-optimal-incremental-build-system
- Bringing Incremental Builds to Continuous Integration
- SaTToSE (Seminar Series on Advanced Techniques & Tools for Software Evolution) 2017
- Guillaume Maudoux and Kim Mens
- https://dial.uclouvain.be/pr/boreal/object/boreal:189543
- http://sattose.wdfiles.com/local--files/2017:schedule/SATToSE_2017_paper_3.pdf
- Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System
- ‹Programming› 2020
- Jeff Smits, Gabriël Konat, Eelco Visser
- https://2020.programming-conference.org/details/programming-2020-papers/16/Constructing-Hybrid-Incremental-Compilers-for-Cross-Module-Extensibility-with-an-Inte
- Scalable Incremental Building with Dynamic Task Dependencies
- Automated Software Engineering (ASE) 2018
- Gabriël Konat, Sebastian Erdweg, Eelco Visser
- https://doi.org/10.1145/3238147.3238196
- https://eelcovisser.org/post/306/scalable-incremental-building-with-dynamic-task-dependencies
- https://www.student.informatik.tu-darmstadt.de/~xx00seba/publications/pie-scalable-incremental-build.pdf
- An introduction to deterministic builds with C/C++
- Automated Localization for Unreproducible Builds
- ICSE 2018
- Zhilei Ren, He Jiang, Jifeng Xuan, Zijiang Yang
- https://arxiv.org/abs/1803.06766
- https://blog.acolyer.org/2018/06/22/automated-localization-for-unreproducible-builds/
- Deterministic builds with Clang and LLD
- Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code
- 2 tips to make your C++ projects compile 3 times faster
- Tip #1: Distributing compilation load
- Tip #2: Using a distcc server container
- https://developers.redhat.com/blog/2019/05/15/2-tips-to-make-your-c-projects-compile-3-times-faster/
- 30% faster Windows builds with clang-cl and the new
/Zc:dllexportInlines-
flag - Anders Schau Knatten
- Another Reason to Avoid #includes in Headers
- How to avoid includes in headers
- Aras Pranckevičius
- Unreasonable Effectiveness of Profilers (profiling the build system) - http://aras-p.info/blog/2017/08/08/Unreasonable-Effectiveness-of-Profilers/
- Forced Inlining Might Be Slow - https://aras-p.info/blog/2017/10/09/Forced-Inlining-Might-Be-Slow/
- Best unknown MSVC flag: d2cgsummary - https://aras-p.info/blog/2017/10/23/Best-unknown-MSVC-flag-d2cgsummary/
- Slow to Compile Table Initializers - https://aras-p.info/blog/2017/10/24/Slow-to-Compile-Table-Initializers/
- Investigating compile times, and Clang -ftime-report - http://aras-p.info/blog/2019/01/12/Investigating-compile-times-and-Clang-ftime-report/
- Another cool MSVC flag: /d1reportTime
- http://aras-p.info/blog/2019/01/21/Another-cool-MSVC-flag-d1reportTime/
- Reports where the compiler frontend spends time.
- Passing /d1reportTime to the MSVC compiler (cl.exe) will make it print:
- Which header files are included (hierarchically), with time taken for each,
- Which classes are being parsed, with time taken for each,
- Which functions are being parsed, with time taken for each.
- Big Project Build Times–Chromium
- C++ Compilation Speed
- Walter Bright - DDJ, August 17, 2010
- https://digitalmars.com/articles/b54.html
- http://www.drdobbs.com/cpp/c-compilation-speed/228701711
- C++ Compilation: Fixing It
- Faster C++ builds
- Identifying and Understanding Header File Hotspots in C/C++ Build Processes
- Automated Software Engineering, Vol. 23, No. 4, 2016
- Shane McIntosh, Bram Adams, Meiyappan Nagappan, Ahmed E. Hassan
- http://rebels.ece.mcgill.ca/journalpaper/2015/07/08/identifying-and-understanding-header-file-hotspots-in-c-cpp-build-processes.html
- Improving C++ Builds with Split DWARF
- Improving Compilation Time of C/C++ Projects
- Physical Design of The Machinery
- Reducing Build Time through Precompilations for Evolving Large Software
- International Conference on Software Maintenance (ICSM) 2005
- Yu, Yijun; Dayani-Fard, Homayoun; Mylopoulos, John and Andritsos, Periklis
- http://www.cs.toronto.edu/%7Eperiklis/pubs/icsm05.pdf
- http://oro.open.ac.uk/6944/
- To Unify or Not to Unify: A Case Study on Unified Builds (in WebKit)
- Compiler Construction (CC) 2019
- Takafumi Kubota, Yusuke Suzuki, and Kenji Kono
- https://doi.org/10.1145/3302516.3307347
- Cotire (compile time reducer)
- a CMake module that speeds up the build process of CMake based build systems by fully automating techniques as precompiled header usage and single compilation unit builds for C and C++.
- https://github.com/sakra/cotire
- Clang -ftime-trace and ftime-trace-granularity=N
- http://releases.llvm.org/9.0.0/tools/clang/docs/ReleaseNotes.html#new-compiler-flags
- Clang Time Trace Feature
- Clang Build Analyzer
- Clang build analysis tool using -ftime-trace
- https://github.com/aras-p/ClangBuildAnalyzer
- https://aras-p.info/blog/2019/09/28/Clang-Build-Analyzer/
- time-trace: timeline / flame chart profiler for Clang
- CTMark (Compile Time Mark)
- Metabench: A simple framework for compile-time microbenchmarks
- Templight: Template Instantiation Profiler and Debugger
- a Clang-based tool to profile the time and memory consumption of template instantiations and to perform interactive debugging sessions to gain introspection into the template instantiation process
- https://github.com/mikael-s-persson/templight
- Use templight and Templar to debug C++ templates
- Templight: A Clang Extension for Debugging and Profiling C++ Template Metaprograms
- 2015 EuroLLVM Developers’ Meeting, Zoltan Porkolab
- https://llvm.org/devmtg/2015-04/slides/EuroLLVM2015Templight.pdf
- https://www.youtube.com/watch?v=djAPtopWhRU
- Visual C++ - C++ Build Insights
- vcperf: A build analysis tool for the MSVC toolchain
- Get started with C++ Build Insights
- Introducing C++ Build Insights
- Analyze your builds programmatically with the C++ Build Insights SDK
- ccache: A Fast C/C++ Compiler Cache
- distcc: A free distributed C/C++ compiler system
- icecream: Distributed compiler with a central scheduler to share build load
- sccache - Shared Compilation Cache
- cpp-dependencies: Tool to check C++ #include dependencies (dependency graphs created in .dot format)
- Header Hero: optimizing C++ codebase header #include dependencies
- A tool for optimizing C++ header files and reducing build times.
- https://bitbucket.org/bitsquid/header_hero
- https://bitsquid.blogspot.com/2011/10/caring-by-sharing-header-hero.html
- https://aras-p.info/blog/2018/01/17/Header-Hero-Improvements/
- include-what-you-use
- A tool for use with clang to analyze #includes in C and C++ source files
- https://include-what-you-use.org/
- https://github.com/include-what-you-use/include-what-you-use
- Common-sense acceleration of your MLOC build
- CppCon 2014; Matt Hargett
- https://www.youtube.com/watch?v=t4M3yG1dWho
- Compiling C++ is slow - let's go faster
- StockholmCpp 2020; Tobias Hieta
- https://www.youtube.com/watch?v=X4pyOtawqjg
- https://gist.github.com/tru/ad677ba2b1d543e238b0e09eb3aad3ac
- LLVM Compile-Time: Challenges. Improvements. Outlook.
- 2017 LLVM Developers’ Meeting; Michael Zolotukhin
- https://www.youtube.com/watch?v=bYHMwyyZ6Mk
- Optimizing builds on Windows
- 2019 LLVM Developers’ Meeting; Alexandre Ganea
- https://www.youtube.com/watch?v=usPL_DROn4k
- https://llvm.org/devmtg/2019-10/slides/Ganea-OptimizingBuildesOnWindows.pdf
- Optimizing compilation times with Templates
- CppCon 2017: Eddie Elizondo
- https://www.youtube.com/watch?v=NPWQ7xKfIHQ
- https://github.com/eduardo-elizondo/cppcon2017
- Practical Techniques for Improving C++ Build Times
- CppCon 2017; Dmitry Panin
- https://www.youtube.com/watch?v=h8UoYG4dvH8
- The Hitchhiker's Guide to Faster Builds
- Viktor Kirilov
- slides: https://slides.com/onqtam/faster_builds
- CppOnSea 2019 - https://www.youtube.com/watch?v=anbOy47fBYI
- C++ Russia 2019 - https://www.youtube.com/watch?v=5rRLHRRqg5A
- code::dive 2018
- Build System Shootout: Comparison of build program expressive power
- TraceCode: Trace a build to find out which source files are built in a binary
- https://github.com/nexB/tracecode-toolkit
- Debug your build by tracing and reversing: stracing your build from sources to binaries
- Autoconf / Automake Basics
- Mark K. Kim; Linux Users' Group of Davis. March 2, 2004.
- https://www.lugod.org/presentations/autotools/presentation/autotools.pdf
- Autotools Mythbuster
- "Autotools Mythbuster is a no-nonsense guide to Autotools, written with the idea of providing a full, integrated view of the tools in the GNU build chain: autoconf, automake, libtool, pkg-config, and so on."
- https://autotools.io/
- Autotools Tutorial
- Autotools Tutorial for Beginners
- Autotools, 2nd Edition
- A Practitioner's Guide to GNU Autoconf, Automake, and Libtool
- 2019; John Calcote
- https://nostarch.com/autotools2e
- Chapter 2: A Brief Introduction to the GNU Autotools
- Autotools: A Demystification Tutorial
- Embedded Linux Conference 2016; Thomas Petazzoni
- https://www.youtube.com/watch?v=_zX8LJ9Xjyk
- http://events.linuxfoundation.org/sites/events/files/slides/petazzoni-autotools-tutorial.pdf
- Autotools: a practitioner's guide to Autoconf, Automake and Libtool
- Four Languages and Lots of Macros: Analyzing Autotools Build Systems
- GPCE 2017
- Jafar M. Al-Kofahi, Suresh Kothari, Christian Kästner
- https://conf.researchr.org/event/gpce-2017/gpce-2017-gpce-2017-four-languages-and-lots-of-macros-analyzing-autotools-build-systems
- https://www.cs.cmu.edu/~ckaestne/pdf/gpce17.pdf
- GNU Autoconf: A uniform means of creating makefiles at build time
- Ethan McCallum - C/C++ Users Journal, January 2006
- http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/CUJ/2006/0601/0601mccallum/0601mccallum.html
- https://web.archive.org/http://www.drdobbs.com/gnu-autoconf/184402060
- https://web.archive.org/http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/CUJ/2006/0601/0601mccallum/0601mccallum.html
- GNU Autoconf, Automake and Libtool
- Minimal autotools template for C++11/14 projects
- Minimal autotools template for C/C++ library projects
- Bazel: a fast, scalable, multi-language and extensible build system
- Awesome Bazel: A curated list of Bazel rules, tooling and resources.
- bazel-tools: Tools for dealing with very large Bazel-managed repositories
- Bazel How to build at Google scale?
- FOSDEM 2017; Klaus Aehlig
- https://archive.fosdem.org/2017/schedule/event/bazel/
- https://www.youtube.com/watch?v=lOUwu0myF8M
- External C++ dependency management in Bazel
- Faster Bazel builds with remote caching: a benchmark
- Your Build in a Datacenter: Remote Caching and Execution in Bazel
- FOSDEM 2018; Jakob Buchgraber
- https://www.youtube.com/watch?v=PrTun05W5g4
- https://fosdem.org/2018/schedule/event/datacenter_build/
- Boost.Build - http://www.boost.org/build/
- Understanding Boost.Build
- Complete Overview on Boost.Jam and Boost.Build
- BoostCon 2011; Boris Schaeling
- https://www.youtube.com/watch?v=OgYwvzUUupM
- https://github.com/boostcon/2011_presentations/raw/master/mon/Boost.Build.pdf
- build2: C++ Build Toolchain
- C++ Dependency Management: from Package Consumption to Project Development
- CppCon 2018; Boris Kolpackov
- https://www.youtube.com/watch?v=Nni2Qu2WitY
- Awesome CMake
- A curated list of awesome CMake scripts, modules, examples and others
- https://github.com/onqtam/awesome-cmake
- C++/CMake modern boilerplate
- CMake: config mode of find_package command (examples)
- CMake cookbook recipes
- CMake Examples
- learning-cmake: a simple CMake tutorial project which contains some different scenarios
- Modern CMake Examples
- Polly: Collection of CMake toolchain files and scripts for cross-platform build and CI testing (GCC, Visual Studio, iOS, Android, Clang analyzer, sanitizers etc.)
- An Introduction to Modern CMake
- Basic CMake usage
- CGold: The Hitchhiker’s Guide to the CMake
- CMake 3.16 added support for precompiled headers & unity builds - what you need to know
- CMake Coding Style
- Dev Santa Claus - Nick Sarten
- Part 1: Adding Clang Sanitizers to a CMake Build
- Part 2: C++ code coverage metrics with gcov
- setting up code coverage metrics for a C++ codebase built using Bamboo, CMake, and GCC
- https://genbattle.bitbucket.io/blog/2018/01/19/Dev-Santa-Claus-Part-2/
- Effective CMake by Kai Wolf
- Effective Modern CMake - Manuel Binna
- Everything You Never Wanted to Know About CMake
- How to Build a CMake-Based Project
- It's Time To Do CMake Right
- Learn CMake's Scripting Language in 15 Minutes
- Professional CMake: A Practical Guide
- siliceum - Clément Grégoire
- CMake basics
- CMake customization points
- Speed up your C++ unit tests cycles with CMake/CTest (and the right testing framework)
- The Architecture of Open Source Applications: CMake
- The Ultimate Guide to Modern CMake
- Tutorial: Easy dependency management for C++ with CMake and Git
- Using ccache with CMake
- BLT (Build, Link and Triumph): A streamlined CMake build system foundation for developing HPC software
- composition of CMake macros and several widely used open source tools assembled to simplify HPC software development.
- https://github.com/llnl/blt
- http://llnl-blt.readthedocs.io/en/latest/
- CMake Unit
- A unit testing framework for CMake.
- https://github.com/polysquare/cmake-unit
- CMakeBuildPackage: Automatic project build script with CMake
- cmake format: Source code formatter for cmake listfiles.
- CMake Modules
- Additional CMake Modules
- Ryan's CMake Modules
- cmany: CMake build tree batching tool
- configure-cmake: autotools-style configure script wrapper around CMake
- CPM.cmake
- CMake's missing package manager. A small CMake script for setup-free, cross-platform and reproducible dependency management.
- https://github.com/TheLartians/CPM.cmake
- Izzy's eXtension Modules: Make CMake less painful when trying to write Modern Flexible CMake
- ucm - useful cmake macros
- Building C++
- C++ Edinburgh 2018; Morris Hafner
- https://www.youtube.com/watch?v=n_f-2p5eDBo
- C++ Weekly - Jason Turner
- Ep 78 - Intro to CMake
- Ep 82 - Intro To CTest
- Ep 208 - The Ultimate CMake / C++ Quick Start
- "CMake, sanitizers, clang-tidy, conan, cmake-format, clang-format, cppcheck, doxygen, ctest, catch, {fmt}, and more!"
- https://www.youtube.com/watch?v=YbgH7yat-Jo
- Deep CMake for Library Authors
- CppCon 2019; Craig Scott
- https://www.youtube.com/watch?v=m0DwB4OvDXk
- Effective CMake
- Effective dependency management with CMake
- MUCplusplus 2017; Kai Wolf
- https://www.youtube.com/watch?v=QayyhI-36os
- Embracing Modern CMake
- Stephen Kelly
- https://steveire.wordpress.com/2017/11/05/embracing-modern-cmake/
- Dublin C++ User Group 2017
- NDC TechTown 2019
- How to CMake Good
- Introduction to CMake
- SwedenCpp 2018; Florent Castelli
- Examples:
- Slides:
- Video:
- Modern CMake for modular design
- Meeting C++ 2017; Mathieu Ropert
- https://www.youtube.com/watch?v=ztrnb-bVVPo
- More Modern CMake - Working with CMake 3.12 and later
- Oh No! More Modern CMake
- Meeting C++ 2019; Deniz Bahadir
- https://www.youtube.com/watch?v=y9kSr5enrSk
- https://github.com/Bagira80/More-Modern-CMake
- Using Modern CMake Patterns to Enforce a Good Modular Design
- CppCon 2017; Mathieu Ropert
- https://www.youtube.com/watch?v=eC9-iRN2b04
- FASTBuild
- a high performance, open-source build system for Windows, Linux, and OS X
- supports highly scalable compilation, caching and network distribution
- https://github.com/fastbuild/fastbuild
- https://www.fastbuild.org/
- https://gradle.org/
- Introduction into C++ Builds with Gradle
- A more helpful makefile
- A Super-Simple Makefile for Medium-Sized C/C++ Projects
- A Tutorial on Portable Makefiles
- Makefile Tutorial
- Notes for new Make users
- Propositions as Filenames, Builds as Proofs: The Essence of Make
- Well documented Makefiles (available via
make help
)
- GNU Make - http://www.gnu.org/software/make/
- An Empirical Analysis of GNU Make in Open Source Projects
- 2017 PhD Thesis; Douglas Martin
- https://qspace.library.queensu.ca/handle/1974/15767
- Makefile Corpus - http://research.cs.queensu.ca/~doug/files/MakeEgs.tar.gz
- Makefile Framework - http://research.cs.queensu.ca/~doug/files/MakeFramework.zip
- An Empirical Study of Unspecified Dependencies in Make-Based Build Systems
- Empirical Software Engineering (2017)
- Cor-Paul Bezemer, Shane McIntosh, Bram Adams, Daniel M. German, Ahmed E. Hassan
- https://doi.org/10.1007/s10664-017-9510-8
- http://rebels.ece.mcgill.ca/journalpaper/2017/03/07/an-empirical-study-of-unspecified-dependencies-in-make-based-build-systems.html
- http://sail.cs.queensu.ca/Downloads/EMSE2017_AnEmpiricalStudyOfUnspecifiedDependenciesInMake-BasedBuildSystems.pdf
- Slides: https://www.slideshare.net/corpaulbezemer/an-empirical-study-of-unspecified-dependencies-in-makebased-build-systems
- GNU make - Paul D. Smith - http://make.mad-scientist.net/
- Paul Smith's Rules of Makefiles - http://make.mad-scientist.net/papers/rules-of-makefiles/
- Deferred Simple Variable Expansion - http://make.mad-scientist.net/deferred-simple-variable-expansion/
- GNU Make articles - John Graham-Cumming
- GNU Make meets file names with spaces in them - https://www.cmcrossroads.com/article/gnu-make-meets-file-names-spaces-them
- GNU Make Standard Library - http://gmsl.sourceforge.net/
- HOWTO: Intro to GNU make variables - https://blog.melski.net/2015/01/07/howto-intro-to-gnu-make-variables/
- Make is (probably) fine
- Make it simple: An empirical analysis of GNU Make feature use in open source projects
- International Conference on Program Comprehension 2015
- Douglas H Martin, James R Cordy, Bram Adams, Giulio Antoniol
- http://maroon.cs.queensu.ca/home/cordy/Papers/MCAA_ICPC15_Makefiles.pdf
- Managing Projects with GNU Make
- Properly using GNU-Make - https://slashvar.github.io/2017/02/13/using-gnu-make.html
- Remake – GNU Make with comprehensible tracing and a debugger
- The Meson Build system
- Getting started with Meson build system and C++
- https://medium.com/@germandiagogomez/getting-started-with-meson-build-system-and-c-83270f444bee
- https://medium.com/@germandiagogomez/getting-started-with-meson-in-c-part-2-58150354ff17
- https://medium.com/@germandiagogomez/getting-started-with-meson-in-c-part-3-70b9bc419957
- https://medium.com/@germandiagogomez/getting-started-with-meson-part-4-8bceec6149e1
- Ninja: a small build system with a focus on speed
- Benchmarking the Ninja build system
- Building Like (a) Ninja [Pt1]
- GN: a meta-build system that generates build files for Ninja
- https://gn.googlesource.com/gn
- https://is.gd/gn_intro
- Basic //build directory for GN-based projects
- ninjatracing: Convert .ninja_log files to chrome's about:tracing format.
- Tundra, a build system
- Tundra is a high-performance code build system designed to give the best possible incremental build times even for very large software projects.
- https://github.com/deplinenoise/tundra
- Tup: a file-based build system.
- Lessons and Pitfalls in Building Firefox with Tup
- 12th Seminar on Advanced Techniques & Tools for Software Evolution (SATToSE) 2019
- Guillaume Maudoux and Kim Mens
- http://hdl.handle.net/2078.1/223053
- clcache.py - a compiler cache for Microsoft Visual Studio
- CompileTimer: Set of tests to benchmark the compile time of C++ constructs
- Make VC++ Compiles Fast Through Parallel Compilation
- NMAKE
- The Microsoft Program Maintenance Utility (NMAKE.EXE)
- Visual Studio 2017 Throughput Improvements and Advice
- MSBuild (Visual C++) - https://docs.microsoft.com/en-us/cpp/build/msbuild-visual-cpp
- Make VC++ Compiles Fast Through Parallel Compilation
- Microsoft AnyBuild
- Remote build execution technology for use in MSBuild, Microsoft Build Accelerator, and other build engines
- https://github.com/microsoft/AnyBuild
- Microsoft.Build (MSBuild)
- The Microsoft Build Engine: the build platform for .NET and Visual Studio
- https://github.com/Microsoft/msbuild
- https://docs.microsoft.com/en-us/visualstudio/msbuild/
- MSBuild (Visual C++) - https://docs.microsoft.com/en-us/cpp/build/msbuild-visual-cpp
- MSBuild Binary and Structured Log Viewer - http://msbuildlog.com/
- MSBuildEditor
- The MSBuild Editor extension provides improved support for editing MSBuild files in Visual Studio and Visual Studio for Mac.
- https://github.com/mhutch/MonoDevelop.MSBuildEditor
- Build Tools
- build native and managed MSBuild-based applications without requiring the Visual Studio IDE. There are options to install the Visual C++ compilers and libraries, MFC, ATL, and C++/CLI support, and .NET and .NET Core support.
- http://aka.ms/buildtools
- GoingNative 63: C++ Build Tools - https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-63-CPP-Build-Tools
- Using A Custom Toolchain In Visual Studio With MSBuild
- Visual Studio and Custom Build Rules
- xcbuild-debugging-tricks
- Xcode new build system debugging tricks
- https://gist.github.com/ddunbar/2dda0e836c855ea96759d1d05f086d69
- https://XcodeBuildSettings.com
- xmake: A cross-platform build utility based on Lua
- Behind the Scenes of a C++ Build System
- Building Modules
- CppCon 2019; Michael Spencer
- https://www.youtube.com/watch?v=L0SHHkBenss
- Build Systems: a Simple Solution to a Complicated Problem
- CppCon 2018; Peter Bindels
- https://www.youtube.com/watch?v=mWOmkwv8N_U
- Creating the Complete Build Package
- CppCon 2018
- Panelists: Boris Kolpackov, Titus Winter, Robert Schumacher, Paddy McDonald, Manuel Klimek
- https://www.youtube.com/watch?v=TjdCxXdjaSA
- Don't package your libraries, write packagable libraries!
- CppCon 2018; Robert Schumacher
- https://www.youtube.com/watch?v=sBP17HQAQjk
- What to Expect from a Next-Generation C++ Build System
- CppCon 2018; Boris Kolpackov
- https://www.youtube.com/watch?v=cJP7SSLjvSI
- Building C++ Modules
- CppCon 2017; Boris Kolpackov
- https://www.youtube.com/watch?v=E8EbDcLQAoc
- There Will Be Build Systems: I Configure Your Milkshake
- CppCon 2017; Isabella Muerte
- https://www.youtube.com/watch?v=7THzO-D0ta4