/
Build System Structure
Build System Structure
Makefile
- Located in
ramcloud/GNUmakefile
- This makefile system follows the structuring conventions recommended by Peter Miller in his excellent paper: Recursive Make Considered Harmful
- Essentially one Makefile, with includes at various places in the project directory
GNUmakefile
is the root Makefile- Included bits are called
Makefrag
.
- No special magic here - this is simply direct expansion of the file contents.
- Means all
Makefrag
contents are still relative to the working directory of the make invocation (which there is only one of in this style of build system). - One can refer to the working directory of make via
$(TOP)
which is declared in the top level Makefile
- Means all
- Keep in mind
- There is no scoping here, if you declare something in a
Makefrag
that conflicts with something in anotherMakefrag
or something in theGNUmakefile
collisions are resolved just as they would be in a single Makefile (i.e. one definition will override the other depending on the order in which they are included.
- There is no scoping here, if you declare something in a
Interesting Targets
make
- build the RAMCloud server and client software- Output
obj.master/client/client, obj.master/server/server
- Replace 'master' with the git local branch name you are on if it is not 'master'
- Output
make unit-test
- build and run RAMCloud unit tests (requires CppUnit)make test
- a simple smoke test that runsunit-test
and builds a simple application to ensure the install information is sufficientmake check
- currently runs Google style checker against files in the src directory; subject to check as style evolves
Unit Testing
- Run via
make unit-test
- Builds and runs the tests in a single shot
Simple Style/Static Checking
- Run via
make check
- Uses cpplint.py to check that the style is the agreed-upon style.