Conditional compiling [Solved]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: Conditional compiling [Solved]

BeitragSo, März 13, 2011 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute

Es gibt ja die Möglichkeit bestimmte Code-Teile abhängig vom OS und Co zu compilen, also:
BlitzMax: [AUSKLAPPEN]
?Linux
?Win32


Kann ich dass jetzt auch für mich selbst machen? Also ich habe ein Programm wovon ich eine Demo erstellen will, und eine Vollversion. Jetzt hat die Demo ein paar Funktionen weniger, kann ich das jetzt irgendwie anstellen, dass ich nur eine Zahl oder so ändern muss damit ich Vollversion oder Demo compilen kann?
So würde ich mir das vorstellen:
BlitzMax: [AUSKLAPPEN]
Const VERSION:Int = 1

?If VERSION = 1
Print "1"
?EndIf

Print "0"


MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
  • Zuletzt bearbeitet von Der Eisvogel am So, März 13, 2011 20:23, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSo, März 13, 2011 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Da muss dir ein normales If genügen, die ?-Konditionen kann man nicht erweitern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Der Eisvogel

BeitragSo, März 13, 2011 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist aber, dass es dann sehr einfach ist, diese Funktionen in der Demo zu aktivieren. Genau das möchte ich verhindern, sodass die Funktionen gar nicht erst mit in das Programm reinkommen.
Gibt es da ne andere Möglichkeit?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Xeres

Moderator

BeitragSo, März 13, 2011 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Da Konstanten durch ihre Werte ersetzt werden, würde ich schätzen, dass das eher schwer geht. Hast du das schon mal ausprobiert?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Der Eisvogel

BeitragSo, März 13, 2011 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist eigentlich total einfach. Also ich habe die Kompilierte Exe. Daring stecken deaktivierte Funktionen. Diese weden eigentlich im Programm-Fluss nur mit einem "jmp" oder eine andere Befehl derart übersprungen. Wenn ich das entsprechende Code Stück überschreibe, dann kann man die Funktionen ohne weiteres verwenden, da sie ja dann nicht mehr übersprungen werden.
Und ja ich habe es schon ausprobiert, und ja es hat auch funktioniert.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Xeres

Moderator

BeitragSo, März 13, 2011 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann wird es am sichersten sein, die betroffenen Funktionen komplett aus zu kommentieren...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Lord Stweccys

BeitragSo, März 13, 2011 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, wie Eisvogel sich das vorstellt geht es.
Er hat bloß das Fragezeichen falsch benutzt.

So funzt es:

BlitzMax: [AUSKLAPPEN]
Const VERSION:Int = 1

?VERSION
Print "1"
?

Print "0"


Mfg, LordSt

Xeres

Moderator

BeitragSo, März 13, 2011 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keinen Fehler - funktionieren tut's aber nicht.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Der Eisvogel

BeitragSo, März 13, 2011 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, also bei mir geht es nicht. Es jetzt immer nur Print "0" ausgeführt, wie bekomme ich jetzt das Print "1" ausgeführt?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Lord Stweccys

BeitragSo, März 13, 2011 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh, ich war mir sicher, dass das funktioniert. Hatte das sogar mal irgendwo gelesen. ô_O

Du könntest vielleicht einen Identifier verwenden, den du eh nicht brauchst, z.B.

BlitzMax: [AUSKLAPPEN]
?Threaded
?


für Demo-Version
und

BlitzMax: [AUSKLAPPEN]
?Not Threaded
?


für Pro-Version.

Das wäre das einzige, was noch plausibel wäre. (Ok, es ist auch nicht wirklich schön)

Der Eisvogel

BeitragSo, März 13, 2011 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das ist leider wirklich nicht schön, da ich das Thread-Zeug nicht mit drin haben will. Was ich probiert habe ich noch im BMK eigene Flags reinzusetzten, aber das geht leider nicht. Ich denke dazu bräuchte ich den SOurce von dem "bcc.exe" Ding.

Alles immer auskommentieren zu müssen ich verdammt viel Arbeit und kann auch mal schiefgehen. Irgendwie muss das doch gehen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Lord Stweccys

BeitragSo, März 13, 2011 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Äh, ich vergaß zu erwähnen: Bei meiner Version MUSS Threading ausgeschaltet sein.

mpmxyz

BeitragSo, März 13, 2011 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Was für eine Art von Features sind es denn?
Kann man diese mit Hilfe von OOP auskapseln?
Dann hast du zwei verschiedene Feature-Klassen, wovon du bei jeder Programmversion nur die richtige importierst. -> Eine Zeile bestimmt, welche Version kompiliert wird.
mfG
mpmxyz
PS: Threading muss ausgeschaltet sein? Nutzt du viele Objekte?
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Der Eisvogel

BeitragSo, März 13, 2011 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee ansich ist gut, aber bei meinem Problem nicht machbar. Die Features die verschwinden sollen, können einzeilig sein, oder aber auch extrem lang. Sie befinden sich überall im Code verstreut. Die Zusammenzeihen geht, nicht da sie gegenseitig auf einander beruhen.

EDIT: So habs jetzt gelöst. Folgender Code funktioniert bei mir so wie ich es will:
BlitzMax: [AUSKLAPPEN]
?setfullversion

?demo
Print "DEMO"
?fullversion
Print "VOLLVERSION"
?
Print "EGAL"

Ich hab am BMK noch eine weitere Funktion hinzugefügt, die meinen Source vorparst und dann erst and den richtigen BMK übergibt. Klappt Prima.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Guamtmsou G.

BeitragDo, Mai 19, 2011 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Eisvogel hat Folgendes geschrieben:
Ich hab am BMK noch eine weitere Funktion hinzugefügt, die meinen Source vorparst und dann erst and den richtigen BMK übergibt. Klappt Prima.

Have you changed "bmk_modutil.bmx" ???
i'm going crazy to do this "conditional compilation"
can you help me??

Thx

BtbN

BeitragDo, Mai 19, 2011 8:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein If, welches nur auf eine konstante prüft, wird zur compile-zeit ausgewertet und entsprechender Code gar nicht assembliert. Es ist also unmöglich, den kram wieder rein zu hacken.

Der Eisvogel

BeitragDo, Mai 19, 2011 8:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, dass ist eigentlich genau das was ich hören wollte jedoch bin ich mir da nicht so sicher gewesen. Ist das irgendwo offiziel schriftlich festgehalten, dass dies der Fall ist?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BtbN

BeitragDo, Mai 19, 2011 8:51
Antworten mit Zitat
Benutzer-Profile anzeigen
guck doch in den assemblierten code, und siehe, dass er nicht mehr da ist.

Der Eisvogel

BeitragDo, Mai 19, 2011 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, das ist ne gute Idee, das hätte glatt von mir sein können. Embarassed
Shame on me.

EDIT: Grad probert. Klappt nicht. Der Code bleibt vorhanden:
BlitzMax: [AUSKLAPPEN]
SuperStrict


Const TEST:Int = False

If TEST Then Notify("Hi")
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group