基于使用 make 命令或生成文件运行预处理器

Running preprocessor based on using make command or makefile

本文关键字:文件 运行 预处理 处理器 于使用 make 命令      更新时间:2023-10-16

在GCC中,我们可以运行简单的预处理器如下:

g++ -E x.cpp > temp.cpp

但是,在有如此多makefile的大型项目中;提及所有依赖项非常麻烦。 例如

g++ -I /home/x1 -I /home/x2 ... -DMACRO1 -DMACRO2 ... -E x.cpp > temp.cpp

有什么方法可以使用makefile,我们可以运行C预处理器?

你不能

-save-temps吗?如果你的项目有很多makefile,也许有一个顶级文件来定义编译器的名称/路径?我只是劫持它看起来像这样:

CC = some-target-gcc -save-temps

然后,每次构建时,您最终都会得到一堆.i文件。

对预处理的文件使用后缀 .cpp 是一个坏主意,因为它与C++文件的.cpp后缀冲突。 尝试其他方法-这是您可以使用后缀.e开始的代码片段:

CXX      = g++
CPPFLAGS = -E
CXXFLAGS = -Wall -DMACRO1 -DMACRO2
INCLUDES = -I /home/x1 -I /home/x2
%.e : %.c
        $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(INCLUDES) $< -o $@

小心在"食谱"的开头放置一个制表符(行"$(CXX( $(CFLAGS( ..."(。 上面的内容定义了一个规则,告诉make如何从.cpp文件构建.e文件。 使用您可以使用的文件x.cpp

make x.e

请注意,-E 标志是在 CPPFLAG 中定义的。 这会告知编译器 (g++( 在预处理阶段后停止。-o告诉编译器将生成的文件放在哪里,而 $@ 是target的简写make,在本例中为 .e 文件。 无需重定向任何内容;G++ 会为您写入.e文件。

如果要为 cpp 文件列表生成.e文件,请执行以下操作:

SRCS = a.cpp b.cpp c.cpp d.cpp
CPPS = $(SRCS:.cpp=.e)   
.PHONY:cpps
cpps: $(CPPS)   

然后构建它们:

make cpps