Although nightly(1) can automate the entire build process, including
source-level checks and generation of additional build products, it is
not always necessary. If you are working in a single subdirectory and
wish only to build or lint that subdirectory, it is usually possible to
do this directly without relying on nightly(1). This is especially true
for the kernel, and if you have not made changes to any other part of
your workspace, it is advantageous to build and install only the
kernel during intermediate testing. See section 5.2 for more
information on installing test kernels.
You will need to set up your environment properly before using make(1) directly on any part of your workspace. You can use bldenv(1) to accomplish this; see ??? and 4.2 Using nightly and bldenv for more information on this command.
Because the makefiles use numerous make(1) features, some versions of make will not work properly. Specifically, you cannot use BSD make or GNU make to build your workspace. The dmake(1) included in the OpenSolaris tools distribution will work properly, as will the make(1) shipped in /usr/ccs/bin with Solaris and some other distributions. If your version of dmake is older (or, in some cases, newer), it may fail in unexpected ways. While both dmake(1) and make(1) can be used, dmake(1) is normally recommended because it can run multiple tasks in parallel or even distribute them to other build servers. This can improve build times greatly.
The entire uts directory allows you to run make commands in a particular build subdirectory (see sections 3.3.2 though 3.3.6) to complete only the build steps you request on only that particular subdirectory. Most of the cmd and parts of the lib subdirectories also allow this; however, some makefiles have not been properly configured to regenerate all dependencies. All subdirectories which use the modern object file layout (see section 3.3.2) should generally work without any problems.
There are several valid targets which are common to all directories; to find out which ones apply to your directory of interest and which additional targets may be available, you will need to read that directory's makefile.
Here are the generic targets:
all
Build all derived objects in the object directory.
install
Install derived objects into the proto area defined by ${ROOT}.
install_h
Install header files into the proto area defined by ${ROOT}.
clean
Remove intermediate object files, but do not remove "complete" derived files such as executable programs, libraries, or kernel modules.
clobber
Remove all derived files.
check
Perform source-specific checks such as source and header style conformance.
lint
Generate lint libraries and run all appropriate lint passes against all code which would be used to build objects in the current directory.