{"id":13409659,"url":"https://github.com/tj/mmake","last_synced_at":"2025-05-15T18:07:15.275Z","repository":{"id":54343331,"uuid":"82111260","full_name":"tj/mmake","owner":"tj","description":"Modern Make ","archived":false,"fork":false,"pushed_at":"2023-07-01T08:07:40.000Z","size":69,"stargazers_count":1725,"open_issues_count":11,"forks_count":43,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-03-31T22:18:00.871Z","etag":null,"topics":["build-system","build-tool","make","makefile","mmake","task-manager","task-runner"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tj.png","metadata":{"files":{"readme":"Readme.md","changelog":"History.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-02-15T22:01:21.000Z","updated_at":"2025-03-28T20:18:37.000Z","dependencies_parsed_at":"2024-01-08T14:30:50.254Z","dependency_job_id":"077acbfd-6b39-4d73-a6e5-02a764895b5d","html_url":"https://github.com/tj/mmake","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj%2Fmmake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj%2Fmmake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj%2Fmmake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj%2Fmmake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tj","download_url":"https://codeload.github.com/tj/mmake/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247744332,"owners_count":20988783,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","build-tool","make","makefile","mmake","task-manager","task-runner"],"created_at":"2024-07-30T20:01:02.611Z","updated_at":"2025-04-07T23:07:48.685Z","avatar_url":"https://github.com/tj.png","language":"Go","readme":"# Modern Make\n\n## About\n\nMmake is a small program which wraps `make` to provide additional functionality, such as user-friendly help output, remote includes,\nand eventually more. It otherwise acts as a pass-through to standard make.\n\n## Installation\n\nVia [gobinaries.com](https://gobinaries.com):\n\n```sh\n$ curl -sf https://gobinaries.com/tj/mmake/cmd/mmake | sudo sh\n```\n\nBuild from source:\n```\n$ go get github.com/tj/mmake/cmd/mmake\n```\n\nHomebrew:\n```\n$ brew tap tj/mmake https://github.com/tj/mmake.git\n$ brew install tj/mmake/mmake\n```\n\nNext add the following alias to your profile:\n\n```\nalias make=mmake\n```\n\n## Features\n\n### Help output\n\nMake's primary function is not to serve as a \"task runner\", however it's often used for that scenario due to its ubiquitous nature, and if you're already using it, why not! Make is however lacking a built-in mechanism for displaying help information.\n\nHere's an example Makefile:\n\n```Makefile\n# Start the dev server.\n#\n# Note that the API server must\n# also be running.\nstart:\n\t@gopherjs -m -v serve --http :3000 github.com/tj/docs/client\n.PHONY: start\n\n# Start the API server.\napi:\n\t@go run server/cmd/api/api.go\n.PHONY: api\n\n# Display dependency graph.\ndeps:\n\t@godepgraph github.com/tj/docs/client | dot -Tsvg | browser\n.PHONY: deps\n\n# Display size of dependencies.\n#- Any comment preceded by a dash is omitted.\nsize:\n\t@gopherjs build client/*.go -m -o /tmp/out.js\n\t@du -h /tmp/out.js\n\t@gopher-count /tmp/out.js | sort -nr\n.PHONY: size\n\n```\n\nMmake provides a `help` command to display all target comments in short form:\n\n```\n$ alias make=mmake\n$ make help\n\n  start      Start the dev server.\n  api        Start the API server.\n  deps       Display dependency graph.\n  size       Display size of dependencies.\n\n```\n\nYou can optionally filter which commands to view the help dialogue for (this supports [standard Unix glob patterns](https://en.wikipedia.org/wiki/Glob_(programming)#Syntax)):\n\n```\n$ make help start\n\n  start   Start the dev server.\n\n$ make help s*\n\n  size    Display size of dependencies.\n  start   Start the dev server.\n\n```\n\nThe `help` command also supports displaying longer output with the verbose flag (`-v` / `--verbose`):\n\n```\n$ make help -v start\n\n  Start the dev server.\n\n  Note that the API server must\n  also be running.\n\n```\n\n```\n$ make help -v\n\n  start:\n    Start the dev server.\n\n    Note that the API server must\n    also be running.\n\n  api:    \n    Start the API server.\n\n  deps:       \n    Display dependency graph.\n\n  size:\n    Display size of dependencies.\n    \n```\n\nThe default behaviour of Make is of course preserved:\n\n```\n$ make\nserving at http://localhost:3000 and on port 3000 of any available addresses\n\n$ make size\n...\n```\n\n### Remote includes\n\nIncludes may specify a URL (http, https, or github shortcut) for inclusion, which are automatically downloaded to `/usr/local/include` and become available to Make. Note that make resolves includes to this directory by default, so the Makefile will still work for regular users.\n\nIncludes are resolved recursively. For example you may have a standard set of includes for your team to run tests, lint, and deploy:\n\n```Makefile\ninclude github.com/apex/make/deploy\ninclude github.com/apex/make/lint\ninclude github.com/apex/make/test\ninclude https://github.com/apex/make/test/Makefile\ninclude https://github.com/apex/make/test/make.mk\n```\n\nThis can be a lot to remember, so you could also provide a file which includes the others:\n\n```Makefile\ninclude github.com/apex/make/all\n```\n\nIf the given repository contains an `index.mk` file, you can just declare:\n\n```Makefile\ninclude github.com/apex/make\n```\n\nOr perhaps one per dev environment such as Node or Golang:\n\n```Makefile\ninclude github.com/apex/make/node\ninclude github.com/apex/make/golang\n```\n\nIf you're worried about arbitrary code execution, then simply fork a project and maintain control over it.\n\n#### Update\n\nOnce the remote includes are downloaded to `/usr/local/include`, `mmake` will not try to fetch them again. In order to get an updated copy of the remote includes, `mmake` provides an `update` target that will download them again:\n\n```\n$ make update\n```\n\n## Registry\n\nIf you're looking to find or share makefiles check out the [Wiki](https://github.com/tj/mmake/wiki/Registry), and feel free to add a category if it is missing.\n\n## Links\n\n- [GNU Make](https://www.gnu.org/software/make/manual/make.html) documentation\n- [Wiki](https://github.com/tj/mmake/wiki/Registry) registry\n- [Announcement](https://medium.com/@tjholowaychuk/modern-make-b55d53cf80d9#.q1u1knrf5) blog post\n- [Introduction](https://www.youtube.com/watch?v=NLS_gbg4_wI) youtube video\n- [AUR Package](https://aur.archlinux.org/packages/mmake-bin/) Arch Linux Package\n\n## Badges\n\n[![GoDoc](https://godoc.org/github.com/tj/mmake?status.svg)](https://godoc.org/github.com/tj/mmake)\n![](https://img.shields.io/badge/license-MIT-blue.svg)\n![](https://img.shields.io/badge/status-stable-green.svg)\n[![](http://apex.sh/images/badge.svg)](https://apex.sh/ping/)\n\n---\n\n\u003e [tjholowaychuk.com](http://tjholowaychuk.com) \u0026nbsp;\u0026middot;\u0026nbsp;\n\u003e GitHub [@tj](https://github.com/tj) \u0026nbsp;\u0026middot;\u0026nbsp;\n\u003e Twitter [@tjholowaychuk](https://twitter.com/tjholowaychuk)\n","funding_links":[],"categories":["工具库","Build Automation","Go","Uncategorized","Automation","實用工具","Utilities","others","构建自动化","工具库`可以提升效率的通用代码库和工具`","CLI Utilities","实用工具"],"sub_categories":["查询语","高級控制台界面","HTTP Clients","\u003cspan id=\"高级控制台用户界面-advanced-console-uis\"\u003e高级控制台用户界面 Advanced Console UIs\u003c/span\u003e","Advanced Console UIs","Contents","高级控制台界面","交流"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj%2Fmmake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftj%2Fmmake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj%2Fmmake/lists"}