I would take the:
Library.AddBook(Book book)
Approach. Essentially a Book can exist outside of a library and we would want to add a particular book instance to a library, not a duplicate instance.
I think this would be the general case for child objects, although you can imagine cases where the child object is an integral part of the parent and the second method might be preferable. Maybe...
Baboon.AddHeart(parameter list...)
Here you can't add just any heart, there will only ever be one etc. its more like a setup step in creating a Baboon than adding a child object.
var b = new Baboon(name: "Jimmy")
.AddHeart(parameter list...)
.AddLungs(parameter list...)
.AddLiver(parameter list...)
.AddBrain(parameter list...)
.Vivify();