gmake 正在 Solaris 10 上隐式删除一些文件

gmake is deleting some files implicitly on Solaris 10

我的构建过程是 运行 GNU gmake。我使用如下文件扩展名:

.pc: pro*c code (compiled by using oracle's proc compiler)
.cpp : c++ code (compiled by GNU g++ compiler)
.o: object file
.mc: c++ code (compiled by GNU g++ compiler)
.mo: object file

.pc 文件由 Oracle proc 编译器编译并且输出具有扩展名 .cpp 或者由 g++ 编译器编译生成 .o文件。所有 .o 个文件最终链接在一起以生成可执行文件。

对于其他一些要求,我需要在 .pc 文件中包含一些特殊的代码块,如下所示。

#ifdef SPCL_BLCK 
// some code
#endif // end of SPCL_BLCK 

我需要不同的路径来获得我的可执行变体,有和没有特殊代码部分。 没有特殊代码部分,路径为:

.pc -> .cpp -> .o -> executable

特殊代码部分,路径为:

.pc -> .mc -> .mo -> executable 

我的 PROC 标志定义为:

PROCFLAGS := code=cpp 'include=(<<list of comma-separated include dirs>>)'

普通规则(针对没有特殊代码的路径):

.pc.c:
        proc $(PROCFLAGS) $<
%.o: %.c
        g++ -c $(CCFLAGS) $<

其中,CCFLAGS 是常用的 C++ 编译器标志

规则(对于有特殊代码的路径):

%.mo: %.mc
    $(CC) -c $(CCFLAGS) -DSPCL_BLCK -o $@ -x c++ $<

%.mc: %.pc
    $(PROC) $(PROCFLAGS) define=SPCL_BLCK oname=$@ $<

一切正常,但在成功构建后,.mc 文件被删除。 我看到这是通过 rm 命令完成的,但是是否有任何隐含规则正在驱动删除 .mc 文件? 我可以有一些命令可以停止触发隐式规则吗?

我需要在 gmakefile 中定义以下内容:

.PRECIOUS:%.c %.mc

否则,GNU gmake 认为 .mc 文件是中间文件并驱动删除这些 .mc 文件