本文介绍了在没有控制的情况下构建.so后,请删除.cc的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近我遇到了 Makefile 的一种极端奇怪的行为:

Recently I encountered an extremly strange behavior of 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

当我使用 make -f ../Makefile hello.so 在当前目录中构建 hello.so 时,它将在删除后删除 .cc 建立 .so :

When I build hello.so in current dir using make -f ../Makefile hello.so, it deletes .cc after building .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 ,但这无济于事.

I tried remove target .PHONY and clean, but it doesn't help.

如何停止 rm hello.cc 中的 make ?

推荐答案

该文件被视为中间文件.要使它免于被删除,您要做的就是将它作为目标或在makefile文件中任何位置的先决条件,例如:

That file is considered an intermediate file. All you have to do to keep it from being removed is mention it as a target or prerequisite anywhere in the makefile, like this:

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

这篇关于在没有控制的情况下构建.so后,请删除.cc的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 13:34