2 Stimmen

wie man ein einfaches makefile für c schreibt

Ich muss eine einfache Make-Datei für my.c schreiben, und so nach

make

dann kann mein Programm ausgeführt werden von

./my

my.c kann damit kompiliert werden:

gcc cJ/cJ.c my.c -lcrypto -o my -lm

Danke Ich füge Folgendes in mein Makefile ein

all:my
my: cJ.o my.o
 gcc cJ.o -lcrypt my.o -o my
cJ.o: cJ/cJ.c
     gcc -c cJ/cJ.c
my.o: my.c
     gcc -c my.c -lm

Bitte um Hilfe

8voto

Tomas Pruzina Punkte 7479

Nun, Makefiles sind nur eine Art von speziellen Skripten. Jedes ist einzigartig, für solch eine einfache Aufgabe würde dies ausreichen:

Makefile:

CC=gcc
CFLAGS=-lm -lcrypto
SOURCES=my.c cJ/cJ.c

all: my

my: $(SOURCES)
        $(CC) -o my $(SOURCES) $(CFLAGS)

Später werden Sie vielleicht andere Optionen wie Platzhalter verwenden wollen %.c in mehreren Dateien zu kompilieren, ohne sie hineinschreiben zu müssen.

Alternativ dazu:

CC=gcc
CFLAGS=-lm -lcrypto

MY_SOURCES = my.c cJ/cJ.c
MY_OBJS = $(patsubst %.c,%.o, $(MY_SOURCES))

all: my

%o: %.c
    $(CC) $(CFLAGS) -c $<

my: $(MY_OBJS)
    $(CC) $(CFLAGS) $^ -o $@

Beachten Sie, dass die Zeilen nach jedem Ziel ("my:", ...) mit einem Tabulator beginnen müssen ( \t ), keine Leerzeichen.

3voto

glglgl Punkte 84928

Nur eine kleine Korrektur: Setzen Sie die -lm in den Linking-Schritt und danach alle Objektdateien.

all: my
my: cJ.o my.o
    gcc cJ.o my.o -o my -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c cJ/cJ.c
my.o: my.c
    gcc -c my.c

Und dann könnten Sie mehr arbeiten mit automatische Variablen :

all: my
my: cJ.o my.o
    gcc $^ -o $@ -lcrypt -lm
cJ.o: cJ/cJ.c
    gcc -c $^
my.o: my.c
    gcc -c $^

donde $@ ist das Ziel der aktuellen Regel und $^ sind die Voraussetzungen.

Siehe auch http://www.gnu.org/software/make/manual/make.html .

0voto

Jeegar Patel Punkte 24720

Einfache Make-Datei für Ihr Programm ist

build : 
        gcc /your_full_path_to_c_file/cJ.c my.c -lcrypto -o my -lm

Kopieren Sie dies einfach in eine Datei und behalten Sie den Namen dieser Datei als makefile dann ausführen als make build

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X