Up, Up, and Away
Let’s say you are in a subdirectory, and there’s a Makefile in a parent directory. How do you run make? You climb back up to the parent directory and type “make”, or use “make -C parent_dir”. In either case, you have to know what the parent dir is. Here are a pair of scripts that do that for you.
The findup
script’s job is to find a file in a parent directory. It prints
the directory name if found, else it exits with status 1.
#! /bin/sh
#
# usage: findup file [file...]
#
# Finds any of the files in the current directory or any directory above and
# prints the directory name. If no such directory is found (we hit the root
# directory), exit 1. Note: will not find files in the '/' directory.
start_dir=`pwd`
while [ `pwd` != '/' ] ; do
for f in $* ; do
if [ -f $f ] ; then
echo `pwd`
exit 0
fi
done
# Keep swimming...keep swimming...swimming, swimming, swimming...
cd ..
done
# No parent directory
exit 1
The makeup
script uses findup
.
#! /bin/sh
#
# usage: makeup [args...]
#
# Finds the first makefile in the current directory or any directory above and
# then runs make, passing on any args given to this script.
#
# Relies on the "findup" command, which is found in this directory.
mfdir=`findup makefile Makefile`
if [ -z "$mfdir" ] ; then
echo no makefile found
exit 1
fi
# We've found a makefile. Use the -C flag to tell make to run from the
# directory where we found the makefile. We do this so that error messages
# produced during the make process are relative to the current directory. I
# think.
make -C $mfdir $*