我正在为构建过程运行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
文件?
我可以使用一些可以停止触发隐式规则的命令吗?
答案 0 :(得分:0)
我需要在gmakefile
中定义以下内容:
.PRECIOUS:%.c %.mc
否则,GNU gmake
认为.mc文件是中间文件并驱动删除这些.mc
个文件