2016-06-13 6 views
-1

Ich habe eine Reihe von Dateien, die generiert werden. Einschließlich generierte Dateien in Makefile Abhängigkeiten

GENERATED = log/loga.c log/logb.h include/loga.h 

Mein Ziel unter initproc hängt von GENERATED oben. Aber ich kann $(GENERATED) unten wie $(INIT_OBJS) nicht einschließen. Es sagt

fatal error: include/loga.h: No such file or directory wenn ich make initproc

initproc: $(INIT_OBJS) log/loga.o init/initb.o settings/settingc.o 
      $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LDLIBSXX) -o [email protected] 

Wie kann ich die Abhängigkeit oben sind?

+1

Post ein [MVCE] (http://stackoverflow.com/help/mcve), haben Sie den Link Regel gezeigt, aber der Fehler bezieht sich eindeutig auf einen Übersetzungsfehler. – user657267

Antwort

2

Sie müssen ein $(GENERATED) Ziel mit einigen Regeln hinzufügen, um zu erklären, wie man diese Dateien erzeugt. Außerdem müssen Sie Kopf-, Quell- und Objektdateien verwalten, indem Sie einige Funktionen patsusbt und filter verwenden. So etwas sollte funktionieren:

# All the generated files (source and header files) 
GENERATED := log/loga.c log/logb.h include/loga.h 

# The rules to generate this files 
$(GENERATED): 
     <some commands to generate the files ...> 

# The rules to generate object files from the generated source files 
# This could be merge with another rule from your Makefile 
GENERATED_SRC := $(filter %.c,$(GENERATED)) 
GENERATED_OBJ := $(patsubst %.c,%.o,$(GENERATED_SRC)) 

$(GENERATED_OBJ): $(GENERATED_SRC) 
     $(CXX) $(CXXFLAGS) -c $^ -o [email protected] 

# The final target depends on the generated object files 
initproc: $(INIT_OBJS) <other objects ...> $(GENERATED_OBJ) 
     $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LDLIBSXX) -o [email protected]