Easymake
Introduction
Easymake is a handy makefile for C/C++ applications on Linux system. For simple applications, you donβt even need to write a single line of makefile code to build your target with easymake.
Features description:
- Finds and compiles all C/C++ source files in the directory recursively (optional). Places the object files and target files in a separate directory.
- Only re-compiles the changed and affected source files. That is, if you
modify your header
foo.h
, all your source files with#include "foo.h"
will be re-compiled. - Supports Simple unit testing.
- Handles more than one entry point in the project.
- Support both static library(libfoo.a) and shared library(libfoo.so) building.
NOTICE: Easymake is designed to be easy to use on simple applications, not as a highly flexible or extensible template. If you want more customization, you might need to look for a small and simple example for start.
Getting Started
Basics
git clone https://github.com/roxma/easymake
cd easymake/samples/basics
cp ../../easymake.mk Makefile
make
./bin/add # if you rename add.cpp to myprogram.cpp, then you get ./bin/myprogram.cpp
Unit Testing
Files with *_test.cpp
or *_test.c
pattern will be used for testing
(inspired by golang).
Multi Entries
Options
Easymake is trying to follow the Makefile Conventions (1) (2). The following options are supported.
CFLAGS
Extra flags to give to the C compiler.CXXFLAGS
Extra flags to give to the C++ compiler.LDFLAGS
Extra flags to give to compilers when they are supposed to invoke the linkerLDLIBS
Library flags or names given to compilers when they are supposed to invoke the linkerARFLAGS
Flags to give the archive-maintaining program; defaultcr
Recommended Style
In the GIFs, I simply copy easymake.mk
into my souce code directory as a
makefile. However, for code simplicity, I recommend the following style:
CXXFLAGS=-O2
# other options
# ...
include /path/to/easymake.mk