Also im Grunde habe ich ein Programm in C geschrieben, das aus ein paar .c
Dateien besteht. Die Make-Datei für sie sieht wie folgt aus:Können wir NDEBUG für Assemblydateien verwenden?
CC=gcc
CFLAGS=-I.
DEBUGFLAGS=-D NDEBUG -O3
default: all
all: fib.o bigint.o bigintadd.o
$(CC) $(DEBUGFLAGS) -o fib fib.o bigint.o bigintadd.o
fib.o: fib.c bigint.h
$(CC) $(DEBUGFLAGS) -c fib.c -o fib.o $(CFLAGS)
bigint.o: bigint.c bigint.h bigintprivate.h
$(CC) $(DEBUGFLAGS) -c bigint.c -o bigint.o $(CFLAGS)
bigintadd.o: bigintadd.c bigint.h bigintprivate.h
$(CC) $(DEBUGFLAGS) -c bigintadd.c -o bigintadd.o $(CFLAGS)
Es funktioniert alles gut, aber ich entschied bigintadd.c
in Baugruppe neu zu schreiben. Wenn ich das modifizierte Programm starte, dauert es jedoch zweimal mehr, bis es ausgeführt wird. Ich frage mich, ob ich NDEBUG
für .s
Datei im Makefile hinzufügen kann? Wenn nicht, dann gibt es irgendwelche Optionen, die mir helfen können, die Ausführungszeit zu verbessern? Die Make-Datei für das Programm mit bigintadd.s
statt bigintadd.c
:
CC=gcc
CFLAGS=-I.
DEBUGFLAGS=-D NDEBUG -O3
default: all
all: fib.o bigint.o bigintadd.o
$(CC) $(DEBUGFLAGS) -o fib fib.o bigint.o bigintadd.o
fib.o: fib.c bigint.h
$(CC) $(DEBUGFLAGS) -c fib.c -o fib.o $(CFLAGS)
bigint.o: bigint.c bigint.h bigintprivate.h
$(CC) $(DEBUGFLAGS) -c bigint.c -o bigint.o $(CFLAGS)
bigintadd.o: bigintadd.s bigint.h bigintprivate.h
as bigintadd.s -o bigintadd.o $(CFLAGS)
Das bedeutet nur, dass Sie schlechteren Code als der Compiler geschrieben haben;) 'NDEBUG' wird nicht helfen (haben Sie es versucht?) – Jester
*" Ich frage mich, ob ich NDEBUG für .s-Datei im Makefile hinzufügen kann "* - Wie soll ein C-Präprozessor-Makro Assembler-Dateien beeinflussen? Es tut mir leid, dies zu sagen, aber der Grund, warum es langsamer ist, liegt darin, dass Sie nicht so gut im Schreiben von Assemblierungen sind wie Ihr Compiler. Die meisten Menschen sind nicht. – StoryTeller
Die einzige Möglichkeit, das Programm schneller laufen zu lassen, besteht darin, meinen Assemblercode zu optimieren, richtig? – Artjom