2017-06-27 2 views
0

Die Ausführung von make schlägt fehl, da die zuvor definierte Regel in der make-Datei nicht gefunden werden kann. Auch die „dir“ Regel funktioniert nur, wenn ich „mache dir“ verwenden, aber wenn ich es zu der zusammengesetzten Regel hinzugefügt listet die Dateien im Arbeitsverzeichnis ....Die generierte Makefile-Regel führt keine definierte andere Regel aus

make test_tester 
dir 
base_types.c dynamic_array.c gists hashtable.c linked_list.c Makefile Makefile_OLD object.c object_table.c out.txt READ_THIS.txt sstring.c tester.c tests ttime.c 
build/test_tester.o 
make: build/test_tester.o: Command not found 
Makefile:7: recipe for target 'test_tester' failed 
make: *** [test_tester] Error 127 

CC=gcc 
CFLAGS=-Wall -I ../include 
TEST_DIR=tests 
BUILD_DIR=build 

test_tester: 
     dir 
     $(BUILD_DIR)/test_tester.o 
     $(BUILD_DIR)/tester.o 
     $(BUILD_DIR)/base_types.o 
     $(BUILD_DIR)/object.o 
     $(BUILD_DIR)/sstring.o 
     $(CC) $(CFLAGS) $(BUILD_DIR)/test_tester.o $(BUILD_DIR)/tester.o $(BUILD_DIR)/base_types.o \ 
     $(BUILD_DIR)/object.o $(BUILD_DIR)/sstring.o 

$(BUILD_DIR)/test_tester.o: 
     $(CC) $(CFLAGS) -c $(TEST_DIR)/test_tester.c -o [email protected] 

$(BUILD_DIR)/tester.o: tester.c 
     $(CC) $(CFLAGS) -c tester.c -o [email protected] 

$(BUILD_DIR)/base_types.o: base_types.c 
     $(CC) $(CFLAGS) -c base_types.c -o [email protected] 

$(BUILD_DIR)/object.o: object.c 
     $(CC) $(CFLAGS) -c object.c -o [email protected] 

$(BUILD_DIR)/sstring.o: sstring.c 
     $(CC) $(CFLAGS) -c sstring.c -o [email protected] 

dir: mkdir -p $(BUILD_DIR) 

.PHONY: clean 
clean: 
     rm -f $(BUILD_DIR)/*.o 
+1

Sie haben keine zusammengesetzt Regel, Sie haben 'test_tester' Ziel ohne Voraussetzungen, nur eine lange Liste von Befehlen. https://www.gnu.org/software/make/manual/make.html#Rule-Introduction – melpomene

+0

@melpomene Müssen die Voraussetzungen für die Regel das Build-Verzeichnis-Präfix haben? –

+1

@eat_a_lemon Voraussetzungen sind in der gleichen Zeile wie das Ziel geschrieben, also meintest du test_tester: dir? Beim dir-target ist es umgekehrt, das mkdir muss in die nächste Zeile eingerückt werden – Ctx

Antwort

0

ich es herausgefunden Dank.

CC=gcc 
CFLAGS=-Wall -I ../include 
TEST_DIR=tests 
BUILD_DIR=build 

test_tester: dir test_tester.o tester.o base_types.o object.o sstring.o 
     $(CC) $(CFLAGS) $(BUILD_DIR)/test_tester.o $(BUILD_DIR)/tester.o $(BUILD_DIR)/base_types.o $(BUILD_DIR)/object.o $(BUILD_DIR)/sstring.o -o [email protected] 

test_tester.o: 
     $(CC) $(CFLAGS) -c $(TEST_DIR)/test_tester.c -o $(BUILD_DIR)/[email protected] 

tester.o: tester.c 
     $(CC) $(CFLAGS) -c tester.c -o $(BUILD_DIR)/[email protected] 

base_types.o: base_types.c 
     $(CC) $(CFLAGS) -c base_types.c -o $(BUILD_DIR)/[email protected] 

object.o: object.c 
     $(CC) $(CFLAGS) -c object.c -o $(BUILD_DIR)/[email protected] 

sstring.o: sstring.c 
     $(CC) $(CFLAGS) -c sstring.c -o $(BUILD_DIR)/[email protected] 

dir: 
     mkdir -p $(BUILD_DIR) 

.PHONY: clean 
clean: 
     rm -fr $(BUILD_DIR) 
Verwandte Themen