Toan Pham wrote:
> I do not know where to ask this question perhaps this mailing list is
> best because it had to do with c complilation.
>
> I would like to set up a make target dynamicly. for example
>
> when one issue command: make sda1
> it auto compile and install to a mount point @ /mnt/sda1
>
> similiarly: make sda2 would compile and install to /mnt/sda2
>
>
> i know that in a makefile one can accomplish this by setting up two targets, ie.
>
> sda1:
> make all
> mount /dev/sda1 /mnt/sda1
> cp releases/* /mnt/sda1
> umount /mnt/sda1
>
> sda2:
> make all
> mount /dev/sda1 /mnt/sda2
> cp releases/* /mnt/sda2
> umount /mnt/sda2
>
>
> i am curious if we can simplify everything by having a make target
> like this when no matches found
>
> $param1:
> make all
> mount /dev/sda1 /mnt/$param1
> cp releases/* /mnt/$param1
> umount /mnt/$param1
You could use a pattern rule, e.g.:
sda%:
make all
mount /dev/$@ /mnt/$@
cp releases/* /mnt/$@
umount /mnt/$@
But that's really abusing make; it's better to use variables for this,
e.g.:
DISC = sda1
install:
make all
mount /dev/$(DISC) /mnt/$(DISC)
cp releases/* /mnt/$(DISC)
umount /mnt/$(DISC)
and use e.g.:
make install DISC=sda1
Beyond that:
1. Don't use "make" in commands; use $(MAKE) instead. This will work
if your make program is actually called e.g. gmake, make-3.81, etc.
Also, if you use "make -n", $(MAKE) will perform a recursive "make -n"
rather than just printing the "make" command.
1a. But only invoke $(MAKE) explicitly if you need to force a
particular sequence. It's usually preferable to list the target as a
prerequisite, e.g.:
install: all
rather than:
install:
$(MAKE) all
2. Use $(INSTALL) rather than "cp". "install" will replace files
atomically, while "cp" overwrites the destination in-place. This fails
if the destination is an executable which is in-use, and can cause
problems due to parallel builds attempting to proceed with an
incomplete source file.
3. "phony" targets shouldn't be over-used. Their behaviour can be
non-intuitive with respect to parallel builds, and executing commands
unconditionally becomes a nuisance once a project gets large.
--
Glynn Clements <glynn@xxxxxxxxxxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Assembler]
[Git]
[Kernel List]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[Yosemite Campsites]
[Yosemite News]
[GCC Help]