Gmake正在隐式上删除Solaris 10的某些文件

gmake is deleting some files implicitly on Solaris 10

本文关键字:文件 Solaris 删除 Gmake      更新时间:2023-10-16

我正在为我的构建过程运行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文件