You can use a combination of both drivers and Transform Constraints. To synchronise the front and rear wheel, Transformation Constraints are an easy choice, as you can map source and destination value ranges easily using known even values, and just use
extrapolate to calculate the rest. I prefer doing this in Armatures, but feel free to also try this on objects.
The constraint between Front and Back wheel could look like this:
The numbers you put in are a relation between the diameter of front and back wheel. So the combination of 5 and 10 is actually arbitrary, it's the relation that matters. 1 and 2 would work just the same.
For the belt, use a Driver instead. Transformation constraint could do the job too, but the issue is, it resets the target bone position after each full revolution of the front sprocket bone. In my case, there was a noticeable popping, so I went for a driver instead:
Note that in my example, the expression is
var, as I had to reverse the bone movement. Thinking about it, I could have also changed the bone roll, and then use
Minimum Value instead of
Scripted Expression for the driver mode. The expression in my case is only so simple, because the radius of the front wheel is 1.
Final result of this Blend File here: