gpt4 book ai didi

python - 每个目标的 Makefile 操作

转载 作者:行者123 更新时间:2023-11-28 06:31:34 25 4
gpt4 key购买 nike

我想编写一个 makefile 来处理具有相同操作的多个目标。例如,对于一个名为“quick_sort”的目标,我的 makefile 开始如下:

TARGET     = trapz
WRAPPER = $(TARGET)_wrap.cxx
SRC = $(TARGET).cc
MATRIXOBJ = vector.o vector_wrap.o matrix.o matrix_wrap.o matrix3d.o matrix3d_wrap.o
OBJ = $(SRC:.cc=.o) $(WRAPPER:.cxx=.o) $(MATRIXOBJ)
CXX = g++
CXXFLAGS = -O3 -fPIC
INTERFACE = $(TARGET).i
SWIGOPT =
SWIG = swig
PYLIB = -I/usr/include/python2.7

SO = so

python_cpp: $(TARGET).i
$(SWIG) -c++ -python $(INTERFACE)
$(CXX) $(CXXFLAGS) -c $(SRC)
$(CXX) $(CXXFLAGS) -c $(WRAPPER) $(PYLIB)
$(CXX) -shared $(OBJ) -o _$(TARGET).$(SO)

python_clean:
rm -f *_wrap* *.o *~ *$(SO) mypython *.pyc .~* core

但是如果我想添加多个目标:

TARGET     = quick_sort bubble_sort standard_sort
WRAPPER = $(TARGET)_wrap.cxx
SRC = $(TARGET).cc
MATRIXOBJ = vector.o vector_wrap.o matrix.o matrix_wrap.o matrix3d.o matrix3d_wrap.o
OBJ = $(SRC:.cc=.o) $(WRAPPER:.cxx=.o) $(MATRIXOBJ)

这是行不通的。如何在不为每个目标创建 makefile 的情况下生成所有可执行文件?

最佳答案

TARGET     := quick_sort bubble_sort standard_sort
MATRIXOBJ := vector.o vector_wrap.o matrix.o matrix_wrap.o matrix3d.o matrix3d_wrap.o
CXX := g++
CXXFLAGS := -O3 -fPIC


.PHONY: all $(TARGET)
all: $(TARGET)

$(TARGET): %: _%.so

_%.so: %_wrap.o %.o $(MATRIXOBJ) Makefile
$(CXX) -shared $(filter %.o, $^) -o $@

%_wrap.cxx: %.i Makefile
swig -c++ -python $<

%.o: %.cxx Makefile
$(CXX) $(CXXFLAGS) -c $< -I/usr/include/python2.7

%.o: %.cc Makefile
$(CXX) $(CXXFLAGS) -c $<

我在这里添加了一些好的做法。如果您想总结良好做法,请在此处阅读我的回答中的“十诫”:makefile enforce library dependency ordering

关于python - 每个目标的 Makefile 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27435482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com