在makefile中生成所有目标

在makefile中生成所有目标,makefile,Makefile,我有一个文件: 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/l

我有一个文件:

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
运行make-f Makefile时,只生成对象文件,如何更改Makefile以同时生成“对象和库文件”


谢谢

摆脱对象文件的规则,make已经知道如何构建它。您可能还应该重新构造您的变量,使它们与内置的链接规则对齐,然后可以循环使用

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 $@

添加虚假目标并将其置于其他目标之前,以使其成为默认目标:

...
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
...

解释:
all
是默认目标(在
Makefile
中的第一个非特殊目标),取决于
$(target).o$(target)。因此
。因此,我们调用
make
而不指定目标,将构建
all
,并在需要时重建其所有先决条件。将它声明为
.PHONY
特殊目标的先决条件会告诉make重新生成它,即使碰巧存在名为
all
的文件。

您的问题不是关于Makefile,而是关于如何创建库文件,不是吗?一旦知道了从对象文件创建库文件的确切命令,就可以在第一次生成对象文件的编译器调用之后添加它。