This package strives to provide clean and easy to understand functions, as well as a transient menu, to build projects of various build systems.
Supported build systems:
- Bazel
- Make
- CMake
- Cargo
- Meson + Ninja
- NPM
build.el provides interactive build commands for each build system. Build commands are prefixed by the name of the build system:
Build system | Prefix |
---|---|
CMake | build-cmake- |
Bazel | build-bazel- |
Make | build-make- |
Cargo | build-cargo- |
Meson+Ninja | build-meson-, build-ninja- |
NPM | build-npm- |
Each build system exposes different amounts of functions, depending on the capability of the build system.
Though in general, where-ever possible, build.el will try to auto-complete possible targets given the context for you.
Make
, only has build-make-run
, which will prompt you for a target that
should be ran, the targets are auto-completed from the Makefile itself.
Bazel
, on the other hand, has build-bazel-run
, build-bazel-test
, and
build-bazel-build
. Running any of the commands will trigger a
completing-read
auto suggestion with matching targets.
CMake
has build-cmake-build
and build-cmake-generate
.
Meson
has build-meson-setup
, compilation is done via build-ninja-build
.
NPM
has build-npm-run
, build-npm-install
and build-npm-uninstall
.
run
, and uninstall
will be autocompleted from the package.json
in the project root.
In general, each build system has it’s own transient menu, these are always
called build-<system>-transient
. Though you will probably want to use
build-menu
, which will try to infer the build system of the current
project and show that instead.
![](https://private-user-images.githubusercontent.com/72092018/368104159-4fd17387-24af-47a2-92a1-2cf7065c73eb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjgxMDQxNTktNGZkMTczODctMjRhZi00N2EyLTkyYTEtMmNmNzA2NWM3M2ViLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU0YzJmNzEzYjdkZDZkMWZkZTBlYWM5NjJhNjFkMDVmNjQxNmIyYmVmYjA3ZGIwNzAzNDM3ZWRmYjBiZWY2ZjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._UeQvrPUigsFU-mgQ6m63CkJu40b3FIg3JSOtzIaWEc)
![](https://private-user-images.githubusercontent.com/72092018/368104167-9f4a4a7b-c925-4e3d-9acb-45c833a7c7ab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjgxMDQxNjctOWY0YTRhN2ItYzkyNS00ZTNkLTlhY2ItNDVjODMzYTdjN2FiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyODFmMTNiMWFiMDEyNTc2MWQ1ZDQ3MWQxYzc1Mzg5NWZkZTEyNzVjODAwOWU3MDA5MTU5YjEwZGE2MjUwMzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.UB_8_tK2IS7zw_YYXWicSOsOAijMDebNWAFPDRPNjmc)
![](https://private-user-images.githubusercontent.com/72092018/368104170-86409bc6-274e-493a-8950-f880d8bf4822.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjgxMDQxNzAtODY0MDliYzYtMjc0ZS00OTNhLTg5NTAtZjg4MGQ4YmY0ODIyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJlNjA2YmFiOGY4ZWJlOGIyNmUxODcxMDhkY2VkZmRiOWIxMzY5MTQ1MjJkNDVjY2IxOTllZjEwYWIyN2Q5NTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.wtpx-pBuDkdqr_puZ7tAXRr9WyLnHUulINMHnT_1650)
![](https://private-user-images.githubusercontent.com/72092018/368238865-5de4ec37-6334-4788-9bc8-92cf06666c91.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjgyMzg4NjUtNWRlNGVjMzctNjMzNC00Nzg4LTliYzgtOTJjZjA2NjY2YzkxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY2NzY0ZjFkNTAyZjllYzMxMDY2MDJmNGUzY2QzYjNhNjI4ODgyNWE1NTk3NjAzNzdmYTA0ZmJmMWQxOTA3MmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qaZmcrEpp3dMd_OVynXJ9ES9gLGLoUnn3DR7Mi3oteQ)
![](https://private-user-images.githubusercontent.com/72092018/368238429-08e9c25a-d1f9-4115-b7f7-cf70fc1b8b21.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjgyMzg0MjktMDhlOWMyNWEtZDFmOS00MTE1LWI3ZjctY2Y3MGZjMWI4YjIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFmNjdlODY2N2Q1NWQxODEwOTE0YWM1MjI4ZDdhNTFmZmJlNjZmMTI3ZWI3Njg3MWQ0ODkzNGM4MWNiNmRiYWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.G_AJrawCMjVnjdf5LCYv7ZOk1sULNYYFoKzdvdxOZnI)
![](https://private-user-images.githubusercontent.com/72092018/368675478-bd46f6eb-6c67-42a8-89da-853b710547b5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTA2MDQsIm5iZiI6MTczOTM1MDMwNCwicGF0aCI6Ii83MjA5MjAxOC8zNjg2NzU0NzgtYmQ0NmY2ZWItNmM2Ny00MmE4LTg5ZGEtODUzYjcxMDU0N2I1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA4NTE0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA2OThkZmY4OWNjZTNkMTYxODU2OWUyOGU2YTI1YmQ5NWIzY2IyMzE0ZWVlMzE3MmMxNTg4NDY1OTJkOTc4YTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ONlatYWGG8_kcaK_mLDSKRnpFifJbjAmVi7Ax6jqmWA)
Clone the repository:
git clone https://github.com/27justin/build.el ~/.emacs.d/site-lisp/build.el
Add it to your load path
(add-to-list 'load-path "~/.emacs.d/site-lisp/build.el")
(use-package build)
Done.