Library configuration

Ahh yes, the cpp file for the library will be compiled before any file includes the library header. You would need a global header like global.h that the library and your code ( sketch includes first ) so the #defines are taken into account before compiling the library .cpp.

I think passing a struct of values is adequate ( not really much different that having a constructor with a lot of parameters ). And if there are a lot of options/settings, you could store the struct in program memory and pass the PGM pointer to the library for it to handle data access, but easier is having a predefined struct as a data member then if a user provides one in a constructor, copy the values into the struct member to overwrite the default values.