Seite 1 von 1

Präprozessor innerhalb Präprozessor

Verfasst: Di Okt 11, 2011 5:58 pm
von Xin
Wie immer habe ich mal wieder etwas ausgefallenere Probleme.

Ich brauche ein Präprozessormakro, das in Abhängigkeit eines Präprozessordefines ein anderes Präprozessor-Makro aufruft.

Momentan sieht das bei mir so aus:

Code: Alles auswählen

#define CPPUNIT_EXPERIMENTAL( test, hostname ) \
#ifdef COMPUTERNAME_##hostname \
    CPPUNIT_TEST( test ) \
#endif
Und die Antwort des Kompilers ist ein klares "No"...

Code: Alles auswählen

error C2162: Formaler Makroparameter erwartet
Beim Kompilieren wird eine Variable COMPUTERNAME_BLABLA erzeugt, wobei BLABLA für den Namen dieses Rechners steht. Ich will damit bezwecken, dass dieser CPPUNIT-Test nur auf diesem Rechner ausgeführt wird (und eben nicht auf anderen Rechnern, weil ich daran entwickle und der Test sowieso noch nicht sauber läuft.)

Jemand eine Idee, wie ich das Visual Studio schöner erklären kann? Im Idealfall so, dass es funktioniert und ohne dass ich das Makro selbst ausformuliert da hinschreiben muss?

Re: Präprozessor innerhalb Präprozessor

Verfasst: Di Okt 11, 2011 6:26 pm
von Xin
Aktuelle Lösung:

Code: Alles auswählen

#ifdef  COMPUTERNAME_BLABLA
#define COMPUTERNAME_BLABLA_TEST(test) CPPUNIT_TEST( test )
#else
#define COMPUTERNAME_BLABLA_TEST(test)
#endif

#define CPPUNIT_EXPERIMENTAL( test, hostname ) COMPUTERNAME_##hostname##_TEST( test )
Nicht schön... bin an Alternativen interessiert... ^^

Re: Präprozessor innerhalb Präprozessor

Verfasst: Di Okt 11, 2011 8:05 pm
von Kerli
Nachdem es beim Präprozessor nur genau einen Durchlauf gibt wird es schwer sein schönere Lösungen zu finden.

Warum gehst du denn eigentlich über den Hostnamen? Wenn du nur eine mit einem define arbeitest sparst du dir eine Zeile ;)

Re: Präprozessor innerhalb Präprozessor

Verfasst: Do Okt 13, 2011 9:17 pm
von Xin
Kerli hat geschrieben:Warum gehst du denn eigentlich über den Hostnamen? Wenn du nur eine mit einem define arbeitest sparst du dir eine Zeile ;)
Weil der Test nur auf einem bestimmten Computer laufen soll. Also insbesondere nicht auf dem Buildserver... ^^

Re: Präprozessor innerhalb Präprozessor

Verfasst: Do Okt 13, 2011 9:59 pm
von Kerli
Da wäre es doch eigentlich schöner mit zb. -DBUILD_EXPERIMENTAL_TESTS beim Bauen auf deinem Rechner. Den Hostnamen zu verwenden ist dann vielleicht doch etwas schwer wartbar. Was wenn jemand anderer die Test kompilieren oder ausschließen möchte? Dann müsste man das im Code anpassen, und das würde Mehraufwand bedeuten ;)

Re: Präprozessor innerhalb Präprozessor

Verfasst: Do Okt 13, 2011 10:33 pm
von Xin
Kerli hat geschrieben:Da wäre es doch eigentlich schöner mit zb. -DBUILD_EXPERIMENTAL_TESTS beim Bauen auf deinem Rechner. Den Hostnamen zu verwenden ist dann vielleicht doch etwas schwer wartbar. Was wenn jemand anderer die Test kompilieren oder ausschließen möchte? Dann müsste man das im Code anpassen, und das würde Mehraufwand bedeuten ;)
Wenn ich den Test entwickle, will den kein anderer ausführen. Der tut's ja noch nicht.

Wenn ich einen Test entwickle, will ich auch nicht die Tests der anderen ausführen.

Die einfachste Möglichkeit zu bestimmen, wer hier was will, ist den Namen des Computers abzufragen.

Re: Präprozessor innerhalb Präprozessor

Verfasst: Fr Okt 14, 2011 12:55 pm
von Panke
Das einfachste was mir einfällt ist -DBUILD_XIN_TEST

Re: Präprozessor innerhalb Präprozessor

Verfasst: Fr Okt 14, 2011 1:18 pm
von Xin
Panke hat geschrieben:Das einfachste was mir einfällt ist -DBUILD_XIN_TEST
Die Projekte werden auf dem lokalen Rechner erzeugt. Übergibt man den Computernamen, so ist genau dieses -D auf meinem Rechner ein anderes als auf dem Build-Server: -DCOMPUTERNAME_XIN

Re: Präprozessor innerhalb Präprozessor

Verfasst: Fr Okt 14, 2011 2:41 pm
von Kerli
Xin hat geschrieben:Die Projekte werden auf dem lokalen Rechner erzeugt. Übergibt man den Computernamen, so ist genau dieses -D auf meinem Rechner ein anderes als auf dem Build-Server: -DCOMPUTERNAME_XIN
Achso. Ich hab gedacht du fragst irgendwie den Hostnamen vor dem kompilieren ab ^^