2016-08-09 28 views
2

Ich habe Makefile:generieren alle Ziele in Make-Datei

INC=-I/usr/lib/boost_1_61_0 
PYTHON_VERSION = 2.7 
PYTHON_INCLUDE = /usr/include/python$(PYTHON_VERSION) 

# location of the Boost Python include files and library 
MINIREADER_INC = ./../../hdr 
BOOST_INC = /usr/lib/boost_1_61_0 
BOOST_LIB = /usr/lib/boost_1_61_0/stage/lib 

TARGET = LoggerTestModule 

$(TARGET).o: $(TARGET).cpp 
     g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -I$(MINIREADER_INC) -fPIC -c $(TARGET).cpp --std=c++14 -g3 

$(TARGET).so: $(TARGET).o 
     g++ -shared -Wl,--export-dynamic $(TARGET).o ../../Release/src/Logger.o -L$(BOOST_LIB) -lboost_python -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o $(TARGET).so --std=c++11 -g3 

Wenn machen laufen -f Makefile nur Datei generiert wird widersprechen, wie ich Make-Datei sowohl zu generieren „Objekt und Bibliotheksdatei“ ändern?

Dank

+0

Sie fragen nicht über Makefile, sondern darüber, wie man eine Bibliotheksdatei erstellt, nicht wahr? Sobald Sie den genauen Befehl zum Erstellen einer Bibliotheksdatei aus einer Objektdatei kennen, können Sie sie einfach direkt nach dem Compileraufruf hinzufügen, der die Objektdatei zuerst generiert. – Tim

Antwort

1

ein Pseudoziel hinzufügen und es vor den anderen so setzen recyceln kann, dass es das Standardziel ist:

... 
TARGET = LoggerTestModule 

.PHONY: all 

all: $(TARGET).o $(TARGET).so 

$(TARGET).o: $(TARGET).cpp 
     g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -I$(MINIREADER_INC) -fPIC -c $(TARGET).cpp --std=c++14 -g3 
... 

Erläuterungen:all ist das Standardziel (erster nicht-Sonderziel in Makefile) und ist abhängig von $(TARGET).o $(TARGET).so. Also, rufen wir make ohne Angabe eines Ziels, es ist all, die gebaut wird und alle seine Voraussetzungen werden bei Bedarf neu erstellt werden. Wenn es als Voraussetzung für das spezielle Ziel .PHONY deklariert wird, wird make aufgefordert, es neu zu erstellen, auch wenn versehentlich eine Datei mit dem Namen all existiert.

0

der Regel für die Objektdatei Befreien Sie sich, machen bereits weiß, wie es zu bauen. Sie sollten wahrscheinlich auch Ihre Vars restrukturieren sie mit dem eingebauten Regel ausrichten für die Verknüpfung, die Sie dann

TARGET := LoggerTestModule 

PYTHON_VERSION := 2.7 
PYTHON_INCLUDE := /usr/include/python$(PYTHON_VERSION) 
MINIREADER_INC := ./../../hdr 
BOOST_INC  := /usr/lib/boost_1_61_0 
BOOST_LIB  := /usr/lib/boost_1_61_0/stage/lib 

CPPFLAGS := -I$(PYTHON_INCLUDE) -I$(MINIREADER_INC) -I$(BOOST_INC) 
CXXFLAGS := -fPIC -std=c++14 -g3 
LDFLAGS := -L$(BOOST_LIB) -L/usr/lib/python$(PYTHON_VERSION)/config 
LDLIBS := -lboost_python -lpython$(PYTHON_VERSION) 

$(TARGET).so: CC := $(CXX) 
$(TARGET).so: LDFLAGS += -shared -Wl,--export-dynamic 
$(TARGET).so: $(TARGET).o ../../Release/src/Logger.o 
    $(LINK.o) $^ $(LDLIBS) -o [email protected]