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"...
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 ^^