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

时间:2016-11-25 10:26:28

标签: c++ makefile gnu-make gnu

我正在为构建过程运行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文件? 我可以使用一些可以停止触发隐式规则的命令吗?

1 个答案:

答案 0 :(得分:0)

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

.PRECIOUS:%.c %.mc

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