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