在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,而是关于如何创建库文件,不是吗?一旦知道了从对象文件创建库文件的确切命令,就可以在第一次生成对象文件的编译器调用之后添加它。