基于使用 make 命令或生成文件运行预处理器
Running preprocessor based on using make command or makefile
在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
相关文章:
- pybind11:属性错误:尝试从 py 文件运行函数时,模块'XXX'没有属性'YYY'
- 从 cmake 文件运行 npm 命令
- C++ 从文件运行实际代码而不编译它
- 如何直接在安卓设备上作为可执行文件运行简单的 c++ 程序?
- 用于使用可选输入文件运行 C++ 的 VIM 映射
- 我的应用程序是从Visual Studio内部运行还是通过执行EXE文件运行
- LD_BIND_NOW可以使可执行文件运行得更慢?
- 生成文件:从生成文件运行其他生成文件
- G++ 和 CL(VS2017) 都编译成功,但 cl 编译的可执行文件运行异常
- 阻止EXE文件运行C
- 如何从安卓原生二进制文件运行单独的进程
- 为在应用程序中作为函数参数传递的文件运行'iconv'命令C++
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误
- 如何从另一个CPP文件运行整个CPP文件
- C++从文本文件运行代码
- 编译并使用生成文件运行
- 为我的生成文件运行时出错.cpp
- C++获取当前文件运行exe
- 如何在C++中从类文件运行函数
- 基于使用 make 命令或生成文件运行预处理器