help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MAKECMDGOALS and spaces


From: Kaz Kylheku (gmake)
Subject: Re: MAKECMDGOALS and spaces
Date: Wed, 17 Feb 2021 21:56:15 -0800
User-agent: Roundcube Webmail/0.9.2

On 2021-02-17 09:35, Sébastien Hinderer wrote:
Hello,

Kaz Kylheku (gmake) (2021/02/13 11:44 -0800):
Pardon the pontificating, but 've never worked with or seen
a Makefile that had spaces in a target name; that kind of
thing is best avoided.

I don't like spaces especially, either. But it seems it's not really
possible to claim one fully supports building on Windows if not
supporting directories with spaces in their names. For instance, one may
want to install to a subdirectory of "C:\Program files". In such a
scenario, one thing that would seem natural to do, at least to me, is to
have targets to creat the required directories.
I am suspecting make would have a hard time handlign this properly, but
if there is any recommendation I'd be very interested.

There is a recommendation.

Don't even think about using make for installing programs on
Microsoft Windows.

Use a proper installer, like Nullsoft's NSIS or whatever.

Firstly, Make doesn't have the installer wizard GUI support
that users expect.

Secondly, what are the deliverables then? A .zip file that the
user extracts, to a folder full of files and a Makefile? How
does the user run that: there is no make utility installed.
To be able to click on the Makefile to run it, it needs an
extension like Install.mak. That has to be associated, by
the Explorer shell, with the make program.

Third, never mind all that Let's examine what is installation.
Installation is not building; it consist mostly of unconditionally
copying some materials into certain destinations, and possibly
tweaking some system configuration settings (something in the
Registry, or environment variables). What is make? A tool for
incrementally updating out-of-date dependencies. Installation
cannot do that; even if the already installed foo.exe has a newer
modification timestamp, a repetition of the installation steps
must overwrite it.

On Unix, we often have an install: target, because, why not?
There are sophisticated users who build from source and have
all the tools involved.

Most users of GNU/Linux distros don't install programs using
anything resembling "make install".

The convention is that "make install" targets must obey the
DESTDIR convention: if a DESTDIR variable is defined, it
gives the prefix for installation. Distro builds use this
to install to a temporary directory, from which they create
a package (or multiple packages: devel package, run-time
package, doc package. ...)

A distro build will not pull a crazy stunt on you, like
hand you a DESTDIR that expands to a path with spaces.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]