Description:
Create a simple build automation tool similar to Make, but with a simpler featureset. The tool should be able to execute targets with dependencies and commands, focusing on the core functionality of a build system.
Requirements:
Configuration File:
Parse a custom configuration file Makefile
Support defining targets, their dependencies, and associated commands
Target Definition:
Allow users to define targets with a name
Support specifying dependencies for each target
Enable associating one or more shell commands with each target
Dependency Resolution:
Implement a dependency graph to determine the order of execution
Detect and report circular dependencies
Command Execution:
Execute shell commands associated with each target
Support running multiple commands for a single target
CLI Interface:
Accept target names as command-line arguments
If no target is specified, run the default target (if defined)
Implement a '-f' flag to specify a custom Makefile
Concurrency:
Execute independent targets concurrently using goroutines
Implement proper synchronization for dependent targets
Error Handling:
Provide clear error messages for configuration issues
Handle and report errors in command execution
Testing:
Write unit tests for core functionalities (parsing, dependency resolution)
Implement integration tests with sample Makefile
Documentation:
Provide clear documentation on the Makefile format
Include usage instructions and examples in the README
Optional Enhancements:
Implement a dry-run mode to show what would be executed
Add support for environment variable expansion in commands
Implement simple variable substitution in the Makefile
Description: Create a simple build automation tool similar to Make, but with a simpler featureset. The tool should be able to execute targets with dependencies and commands, focusing on the core functionality of a build system.
Requirements:
Configuration File:
Makefile
Target Definition:
Dependency Resolution:
Command Execution:
CLI Interface:
Concurrency:
Error Handling:
Testing:
Documentation:
Optional Enhancements: