сделать удалить. cc после сборки. так без контроля - PullRequest
0 голосов
/ 17 апреля 2020

Недавно я столкнулся с крайне странным поведением Makefile:

В текущем каталоге у меня есть hello.pyx:

#cython: language_level=3

print("Hello, world!")

и в .. у меня Makefile :

includes=$(shell python3 -c "import sysconfig; print(sysconfig.get_path('include'))")
CFLAGS=-shared -pthread -fPIC -fwrapv -Oz -flto -Wall -fno-strict-aliasing -I$(includes)
LDFLAGS=-Wl,-plugin-opt=O2

%.cc: %.pyx
        cython --cplus $< -o $@

%.so: %.cc
        clang++ ${CFLAGS} ${LDFLAGS} $< -o $@

clean:
        rm -f *.cc *.so

.PHONY: clean

Когда я строю hello.so в текущем каталоге, используя make -f ../Makefile hello.so, он удаляет .cc после построения .so:

cython --cplus hello.pyx -o hello.cc
clang++ -shared -pthread -fPIC -fwrapv -Oz -flto -Wall -fno-strict-aliasing -I/usr/include/python3.7m -Wl,-plugin-opt=O2 hello.cc -o hello.so
rm hello.cc

Я пытался удалить цель .PHONY и clean, но это не помогает.

Как мне остановить make с rm hello.cc?

1 Ответ

1 голос
/ 17 апреля 2020

Этот файл считается промежуточным файлом . Все, что вам нужно сделать, чтобы предотвратить его удаление, это упомянуть его как цель или обязательное условие в любом месте make-файла, например:

sources: $(patsubst %.so,%.cc,$(MAKECMDGOALS))
...