GenericMakefile

一个通用的makefile,用于小型/中型C和C++项目。「A generic makefile for use with small/medium C and C++ projects.」

  • Owner: mbcrawfo/GenericMakefile
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

GenericMakefile

A generic makefile for use with small/medium C and C++ projects. Allows for
easy project setup without the need to create tedious build rules or
dependency lists. The c directory contains a makefile configured for C, while
the makefile in the cpp directory is configured for C++.

Features

  • Automatically finds and compiles all source files within the source directory.
  • Compiles most recently modified files first, to hopefully find problems earlier.
  • Automatically generates dependecies as files are compiled, ensuring that files are correctly recompiled when dependecies have updated.
  • Includes configurations for normal (release) build and debug build suitable for GDB debugging.
  • Times the compilation of each file and the entire build.
  • Generates version numbers based on git tags (see below), which are passed the compiler as preprocessor macros.
  • By default, builds in a "quiet" mode that only lists the actions being performed. By passing V=true to make, you can compile in verbose mode to see the full compiler commands being issued.

Versioning

Tags should be made in the format vMAJOR.MINOR.PATCH[-description], where MAJOR, MINOR, and PATCH are numeric. The following macros will be generated and passed to the preprocessor:

  • VERSION_MAJOR (int) - The major version number from the most recent tag.
  • VERSION_MINOR (int) - The minor version number from the most recent tag.
  • VERSION_PATCH (int) - The patch version number from the most recent tag.
  • VERSION_REVISION (int) - The number of commits since the most recent tag.
  • VERSION_HASH (string) - The SHA of the current commit. Includes the "-dirty" suffix if there are uncommited changes.

If the makefile is not used in a git repository, or is in a repository with no tags, the version macros are not created.

Limitations

  • Assumes GNU make.
  • Timing does not work correctly with MacOS. See issue #6 for a workaround patch that allows timing in seconds on Mac.
  • Doesn't really support multiple types of source files in the same project.
  • No easy way to exclude files from the build. You can either change the
    extension of files to be excluded, or use preprocessor flags for
    conditional compilation.

Thanks to

  • My friend Jay and people on Stack Overflow for help with regex to parse the version info.
  • The residents of /r/programming for suggesting numerous tweaks and improvements.

Main metrics

Overview
Name With Ownermbcrawfo/GenericMakefile
Primary LanguageMakefile
Program languageMakefile (Language Count: 3)
Platform
License:MIT License
所有者活动
Created At2014-03-27 03:11:19
Pushed At2020-10-04 04:22:30
Last Commit At2017-07-01 10:32:47
Release Count0
用户参与
Stargazers Count1.7k
Watchers Count71
Fork Count317
Commits Count35
Has Issues Enabled
Issues Count13
Issue Open Count2
Pull Requests Count8
Pull Requests Open Count0
Pull Requests Close Count3
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private