Path: csiph.com!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: Experimental C Build System Date: Tue, 30 Jan 2024 16:46:56 -0800 Organization: A noiseless patient Spider Lines: 52 Message-ID: <86eddyba7z.fsf@linuxsc.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: dont-email.me; posting-host="fb4244b8d2c04d3d864a981f3fa61ba0"; logging-data="1286976"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/DdYn5Ra2wKUkmqwOAtyem4qgwUSfxkJQ=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:PdIqw6AmxuliZDsCFLqdmEIAIfE= sha1:ZnUCgKb5C2Ko3alCv2z+ewWgr/A= Xref: csiph.com comp.lang.c:381297 bart writes: > [description of a rudimentary C build system] What was described is what I might call the easiest and least important part of a build system. Looking over one of my current projects (modest in size, a few thousand lines of C source, plus some auxiliary files adding perhaps another thousand or two), here are some characteristics essential for my workflow (given in no particular order): * have multiple outputs (some outputs the result of C compiles, others the result of other tools) * use different flag settings for different translation units * be able to express dependency information * produece generated source files, sometimes based on other source files * be able to invoke arbitrary commands, including user-written scripts or other programs * build or rebuild some outputs only when necessary * condition some processing steps on successful completion of other processing steps * deliver partially built as well as fully built program units * automate regression testing and project archival (in both cases depending on completion status) * produce sets of review locations for things like program errors or TBD items * express different ways of combining compiler outputs (such as .o files) depending on what is being combined and what output is being produced (sometimes a particular set of inputs will be combined in several different ways to produce several different outputs) Indeed it is the case that producing a complete program is one part of my overall build process. But it is only one step out of many, and it is easy to express without needing any special considerations from the build system.