我有一个perl脚本,我想在gcc正常处理它们之前过滤掉我的cpp/h文件-基本上是一个额外的预处理步骤。是否有捷径可寻?我意识到我可以将cpp文件提供给脚本并让gcc读取stdin的输出,但这对头文件没有帮助。

最佳答案

处理此类过程的经典方法是将源代码(输入到Perl过滤器的代码)视为新语言,并带有新的文件后缀。然后,您告诉make,从这种新文件类型编译C++源文件的方法是使用Perl脚本。

例如:

  • 新后缀:.ccp
  • 新规则(假设.cc后缀):
    .ccp.cc:
            ${FILTERSCRIPT} $<
    
  • 将新的后缀添加到后缀列表中-优先于常规C++规则。

  • 最后一点是最棘手的。如果仅将.ccp后缀添加到列表中,那么当make文件存在时,.ccp不会真正注意.cc文件中的更改。您要么必须删除中间.cc文件,要么确保.ccp在后缀列表中的.cc之前出现。 (注意:如果您编写的“.ccp.o”规则不包含“.ccp.cc”规则,并且不确保清除了“.cc”中间体,那么在编译失败后进行重建可能意味着make仅编译“.cc”文件,这可能令人沮丧和困惑。)

    如果不能更改后缀,则编写一个编译脚本来执行过滤并直接调用C++编译器。

    10-05 18:36