UNPKG

grunt-submake

Version:

Run Make rules through Grunt tasks (by just specifying the Makefile path and the rules!)

117 lines (93 loc) 4.2 kB
# grunt-submake > Run Make rules through Grunt tasks (by just specifying the Makefile path and the rules!) ## Description If your project integrates subprojects using [GNU Make](http://www.gnu.org/software/make/), this plugin is made for you! With this plugin you will be able to run any Make rules from any Makefile inside any Grunt task. Numerous use cases including: * Build your Make-based subprojects during the build of your Grunt-based parent project, * Run your subprojects' tests during the test process of your parent project, * Combine `grunt-contrib-watch` with the power of Make to rebuild modified subprojects' parts without manual server reloading, * Define easily a submake task for each Make-based subproject (no need to remember which rules to run for which subproject), * Handle easily interoperability between Make and Grunt in every case (<b>no need for subprojects specifically</b>), * Keep using command lines without shame (custom Grunt tasks are pretty cool but they could wait), * Do a lot of other thing only you could imagine! #### This plugin is compatible with <b>[CMake](http://www.cmake.org/)</b>! This plugin was inspired by [grunt-subgrunt](https://github.com/tusbar/grunt-subgrunt), which rocks the world by the way. ## Getting Started This plugin requires Grunt `~0.4.5` This plugin aims to run GNU Make commands for subprojects based on this tool so be sure to have [GNU Make](http://www.gnu.org/software/make/) installed. If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: ```shell npm install grunt-submake --save-dev ``` Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript: ```js grunt.loadNpmTasks('grunt-submake'); ``` ## The "submake" task ### Overview In your project's Gruntfile, add a section named `submake` to the data object passed into `grunt.initConfig()`. ```js grunt.initConfig({ submake: { your_target: { options: { // Target-specific options }, projects: { // Paths to subprojects' Makefile } }, }, }); ``` ### Options #### options.cmake Type: `Array` Determines if you want to run `cmake` before `make` to generate the Makefile. The array contains the list of arguments (including the working path directory !). ### Usage Examples ```js grunt.initConfig({ submake: { target1: { projects: { // For each of these projects, the specified make rules will be executed: 'sub-projects/module': '', 'sub-projects/module2': 'build' } }, target2: { // Use an array to run multiple rules: 'sub-projects/module': [ 'clean', 'test' ] }, target3: { // you can add parameters by add an array depth 'sub-projects/module': [ 'clean', [ 'build', '--dist="/usr/bin/"' ]] }, target4: [ // Using an array will just execute make for each one: 'sub-projects/module', 'sub-projects/module2' ], target5: { // you can run cmake (with arguments) before make: options: { cmake: ['.'] }, projects: [ 'sub-projects/module' ] } target6: { // no need for subprojects, you can handle interoperability // by running make at the project root (or anywhere else) '.': 'build' }, }, }); ``` ## Contributing In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). Do not hesitate to open an [issue](https://github.com/pidupuis/grunt-submake/issues) to report a bug. Any <b>ideas of improvement</b> are also welcome as issue! ## Release History * ~0.2.0: CMake command can now be run with arguments * ~0.1.0: Run `make` rules (with arguments or not) for specific paths; Can also run CMake beforehand to generate the Makefile