I've built crux without any optional packages and am now trying to add several contributed packages and am figuring out which of the opt packages I need.  Running with the -r option, adds every Pkgfile found below the current directory, which seems fairly useless.  I see two choices.  First is to have a small wrapper script, like this:
cd /etc/ports
for PORT in \
opt/libxml2 contrib/lighttpd \
opt/php \
opt/libjpeg opt/libpng opt/libgd opt/freetype contrib/php-gd 
do
cd ${PORT}; pkgmk -d -i; cd ../..
done

The other idea (admittedly more SVR4-like) is to create a directory tree of the pkgs I want to install, perhaps with symlinks back tot he /usr/ports directories.  This suffers from the fact that pkgmk -r doesn't seem to follow directory symlinks, so I'd have to create the tree with use lndir, assuming crux had lndir by default.  :(

I've also tried enhancing the above script to scan each Pkgfile for a "Depends on" line and installing those packages first, but I've discovered that the line is usually missing or inaccurate.  :(

BTW, the good news for the community is that I'm doing this in VMware Player, and am updating a wiki page as I go.  The page is  http://crux.nu/Wiki/VMwarePlayer , and it is referenced by http://crux.nu/Wiki/CruxOnVMs, which I created following the style of the Crux on Laptops page.