C语言 基于使用make命令或makefile运行预处理器

jv4diomz  于 2023-03-01  发布在  其他
关注(0)|答案(2)|浏览(189)

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

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

但是,在有这么多makefile的大型项目中;提到所有的依赖项是非常麻烦的。

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

有没有什么方法可以使用makefile来运行C预处理器?

deikduxw

deikduxw1#

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

CC = some-target-gcc -save-temps

这样,每次构建时,最终都会得到一堆.i文件。

vhmi4jdf

vhmi4jdf2#

在预处理文件中使用后缀.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 $@

注意在“recipe”的开头放一个TAB(行“$(CXX)$(CFLAGS)...”)。上面的内容定义了一个规则,告诉make如何从.cpp文件构建.e文件。

make x.e

注意-E标志是在CPPFLAGS中定义的,它告诉编译器(g++)在预处理阶段结束后停止,-o告诉编译器把生成的文件放在哪里,而$@是maketarget的简写,在本例中是.e文件,不需要重定向任何东西;g++为您写入.e文件。
如果要为cpp文件列表生成.e文件,请执行以下操作:

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

.PHONY:cpps
cpps: $(CPPS)

然后构建它们:

make cpps

相关问题