Progmem variables in a "global file"

I've some PROGMEM string; I want put all of them in a file (header or source) and include that file in all the other who need the string;

I want also that the strings have a different value depending on "something", such as a # define

is a difficult thing to explain, then make a trivial example:

file.h

# ifndef file_h
# define file_h

# if defined A
  str1 = "A1";
  str2 = "A2";
# else if defined B
  str1 = "B1";
  str2 = "B2";
# else
  str1 = "C1";
  str2 = "C2";
# endif

char * arr [] = {str1, str2};
# endif

(eventually create the array in each block of the if-else; the definition of 'A', 'B' etc is made by the sketch)

unfortunately such a thing as above by an error of multiple definiton of ... although "file.h" is included only one other file ...

another soluction is to make fileA.h, fileB.h etc and include only a file in sketch, and all the file in the other who need it... but I do not know how to do...

you have any ideas?
p.s. each string is progmem

Maybe something like this:

#if defined A
#  define  STR1  "A1"
#  define  STR2  "A2"
#else
#  define  STR1  "B1"
#  define  STR2  "B2"
#endif

char str1[] PROGMEM = STR1;
char str2[] PROGMEM = STR2;
char * arr[] PROGMEM = {str1, str2};

There's a shorthand for declaring individual strings in PROGMEM using the PSTR macro:

If it were me, I would probably handle it like this:

char * arr[] PROGMEM = {
#if defined A
   PSTR("A1"), PSTR("A2")
#else
   PSTR("B1"), PSTR("B2")
#endif
 };

.. give or take a brace or two.

This is the best reference: avr-libc: Data in Program Space