Frage

Ich benutze Reis zum Schreiben einer C ++ - Erweiterung für ein Ruby -Edelstein. Die Erweiterung erfolgt in Form einer gemeinsam genutzten Objektdatei (.so).

Dies erfordert 'mkmf-rice' anstelle von 'mkmf', aber die beiden (AFAIK) sind ziemlich ähnlich.

Standardmäßig verwendet der Compiler die Flags -g -O2. Persönlich finde ich diese Art von alberne, da es schwierig ist, mit einer optimierten Optimierung zu debuggen. Ich habe mich mit der Bearbeitung des Makefile bearbeitet, um die Flaggen herauszunehmen, die ich nicht mag (z. B. Entfernen -fPIC -shared Wenn ich debuggen muss main() anstelle von Rubys Haken).

Aber ich denke, es muss einen besseren Weg geben. Ich weiß, ich kann einfach tun

$CPPFLAGS += " -DRICE"

So fügen Sie zusätzliche Flags hinzu. Aber wie entferne ich Dinge, ohne das Makefile direkt zu bearbeiten?

Eine sekundäre Frage: Welche Optimierungen sind sicher für gemeinsame Objekte, die von Ruby geladen werden? Kann ich Dinge tun wie -funroll-loops? Was empfehlen Sie alle?

Es ist ein wissenschaftliches Computerprojekt, je schneller desto besser. Gedächtnis ist kein großes Problem.

Danke vielmals!

War es hilfreich?

Lösung

Der schnelle und schmutzige Weg besteht darin, -O0 an cxxflags anzuhängen, was die Optimierung deaktiviert. Spätere Optionen überschreiben frühere.

In Bezug auf die Sicherheit eines Plugins sollten Sie in der Lage sein, alles zu tun, was den ABI nicht beeinflusst. Ohne Tests verstehe ich nicht, warum -Funroll würde. Natürlich bedeutet Safe nicht besser. Wie von der Mannseite festgestellt, "macht die Funroll-Schleife Code größer und können es schneller laufen oder nicht."

Andere Tipps

Um Sie zu definieren, verwenden Sie

-D name=definition

Wie Sie in Ihrem Beispiel tun:

$CPPFLAGS += " -DRICE"

-Dein Name
Abbrechen Sie eine frühere Definition des Namens, die entweder eingebaut oder mit einer Option für eine -d bereitgestellt wurden.

$CPPFLAGS += " -URICE"

Obwohl ich nicht sicher bin, ob es bei Undefining -o2 hilft, wie Sie es wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top