Clion快速查看cpp preprocess 文件

2020-11-23 22:05:02 浏览数 (1)

这里其实应该说CMake管理的项目,如何快速查看其Preprocess文件。因为Clion默认使用CMake管理文件,所以这里对Clion也适用。

注意:仅适用CMake make,对于CMake ninja等不适用。

对于Clion项目,编译时会生成cmake-build-debug目录,里面是cmake编译项目的产物。如下图:

Clion项目结构Clion项目结构

注意,这里最重要的是Makefile文件,里面会有一系列任务。

这里我们最关注的是“main.cpp.i”,其内容如下,作用是生成预处理preprocess文件。

代码语言:javascript复制
# target to preprocess a source file
main.cpp.i:
	$(MAKE) -f CMakeFiles/cppConcurrencyDemo.dir/build.make CMakeFiles/cppConcurrencyDemo.dir/main.cpp.i

和Makefile同级,然后执行“make main.cpp.i”,就会生成对应的preprocess文件。如下图:

main.cpp.i 预处理文件main.cpp.i 预处理文件

这里来看下源文件和预处理后的文件对比:

查如何生成预处理文件是因为,写modern cpp时,想看下using后的会不会被预处理,“gcc -E”在大项目中不实用,所以找下有没有更智能更自动化的方法。

下图这里,左边的define在右侧可以看到已经被预处理了,但是using这些是不能被预处理的.

cpp和预处理文件对比cpp和预处理文件对比

举一反三,我们在看下Makefile里还有什么有意思的target:

代码语言:javascript复制
# target to generate assembly for a file
main.cpp.s:
	$(MAKE) -f CMakeFiles/cppConcurrencyDemo.dir/build.make CMakeFiles/cppConcurrencyDemo.dir/main.cpp.s

可以看到,通过"make main.cpp.s",我们就可以生成对应的汇编文件。

这些任务,都可以从Help target中找到。

代码语言:javascript复制
# Help Target
help:
	@echo "The following are some of the valid targets for this Makefile:"
	@echo "... all (the default if no target is provided)"
	@echo "... clean"
	@echo "... depend"
	@echo "... rebuild_cache"
	@echo "... edit_cache"
	@echo "... cppConcurrencyDemo"
	@echo "... main.o"
	@echo "... main.i"
	@echo "... main.s"

由于是借助于CMake和Makefile的能力,所以对于多文件的项目也是可以的。

参考:

http://anadoxin.org/blog/generating-preprocessed-sources-in-cmake-projects.html

0 人点赞