easymake
easymake copied to clipboard
A handy makefile for simple C/C++ applications
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 linker -
LDLIBS
Library flags or names given to compilers when they are supposed to invoke the linker -
ARFLAGS
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