首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码的“真面目”---如何查看cpp预处理后程序代码

如果能阅读宏展开后的代码,会轻松方便很多。 所以本文目的就是如何方便快捷的获得宏展开后的代码?...CMake + make 平常验证cpp代码喜欢使用CLion,CLion默认使用CMake + make构建系统,项目结构如下: [Clion项目结构] 分析了CMake默认生成的makefile,意外发现里面就有我需要的...CMakeFiles/cppConcurrencyDemo.dir/main.cpp.i 进入命令行,和makefile同级别目录,然后执行“make main.cpp.i”,就会生成对应的preprocess...Thus, compiling foo.c with -c -save-temps would produce files foo.i and foo.s, as well as foo.o....到这里,对Android NDK的两种构建系统,我们都可以快速生成预处理文件了。 4. XCode 最后看下在iOS的XCode中,如何查看cpp预处理文件?

6K41

Makefile

make能自动化完成这些工作,是因为项目提供了一个Makefile文件,它负责告诉make,应该如何编译和链接程序。...在本教程中,我们将由浅入深,一步一步学习如何编写Makefile,完全针对零基础小白,只需要提前掌握如何使用Linux命令。...使用隐式规则 Makefile支持许多内置的隐式规则,例如编译C语言程序的规则: %.o: %.c $(CC) $(FLAGS) $< 含义: 将每个 .c 文件编译为对应的 .o 文件(对象文件...所以该规则会使*.c从第一个开始,逐个编译为对应的.o文件。 小结:隐式规则让Makefile更简洁,很多情况下不需要显式定义规则。 使用变量 赋值形式 = 这种赋值在解析时是延迟展开的。...也就是说,右侧的值在被使用时才会被计算,左值变为变量来使用。这种赋值方式是 GNU Make 的标准形式。

12410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Makefile基本用法

    来源 https://www.gnu.org/software/make/manual/make.pdf 简单的例子 其中的cc通过链接,间接指向/usr/bin/gcc。...名为GUNmakefile和Makefile的文件同时存在,则使用前者。 调用方法过程中,若前者不存在,则如下脚本给出了如何寻找后者是否存在所需要调用的方法,然后执行。...其中,%表示任意,force表示即使当前已经生成了目标仍然执行该方法名对应方法。 force给出一行空依赖显式声明,防止force作为%的一员,被隐式自身依赖自身的隐式构建。...当多个.d文件生成后,其中包含了各个依赖关系,使用include方法包括到文件中,如下包含了foo.d和bar.d。 其中的:.c=.d,将source中的.c替换为了对应的.d。...内容还是挺多的,这个文档算是前一半吧。 后面的用到再详细查。 https://www.gnu.org/software/make/manual/make.html

    2.5K40

    Google的 DI 框架 Wire

    介绍 Wire是一个代码生成工具,使用依赖注入自动连接组件。组件之间的依赖关系在Wire中表示为函数参数,鼓励显式初始化,而不是全局变量。...wire:生成依赖注入代码wire_gen.go go generate:当存在wire_gen.go时,也就是非初次,还可使用这个命令 生成的依赖注入代码 wire_gen.go func InitializeEvent...{} } 生成的依赖注入代码 func injectFoo() Foo { foo := _wireFooValue return foo } var ( _wireFooValue...return foo.S } func provideFoo() Foo { return Foo{ S: "Hello, World!"...清理函数保证在此 Provider 的任何依赖的清理函数之前被调用,必须具有签名func() 不 return 最终生成的对象 在依赖注入声明函数中,会返回一个无用对象,因为最终生成的依赖注入代码中

    70632

    Linux 开发 | 学习 Makefile

    @(linux 编程)[开发技能, 工具使用] What is GNU Make Make 是控制工程中通过源码生成可执行文件和其他相关文件的工具。...Make 通过 Makefile 获取如何编译、链接和安装清理工程的信息。 本文记录如何为自己的工程编写一个Makefile,主要参考 GNU Make Manual。获取详细信息请直接阅读手册。...隐式规则 Make 自己推导出来的规则,比如目标为 main.o 就推出依赖条件中需要 main.c和对应的编译命令 变量定义 类似程序中宏定义, 文本替换。...读入被 include 的其他 Makefile,在对应位置展开 初始化变量 推导隐式规则;分析所有规则,创建依赖关系链,决定哪些需要【重新】生成,执行命令。 从第一个 target(排除以 ....这样写的一些理由是: 避免 Make 自己推测命令(隐性规则) Make 不会报错他不知道该对象如何生成,并假设已经是最新。

    5.4K10

    makefile文件编写「建议收藏」

    objects = foo.o bar.o baz.o files = $(objects:.o=.c) 4、规则定义: 规则是makefile中最重要的概念,其告诉make 目标文件的依赖关系,以及如何生成及更新这些目标文件...在makefile文件规则有2种,一种是显式规则,另一种是隐式规则。...显式规则用于说明 何时及如何重新生成目标,其列出了目标依赖的文件信息,并通过调用命令来创建或更新目标,其语法一般为: targets : prerequisites recipe...隐式规则用于说明 何时及如何来重新生成一类目标文件根据其名称,其描述了目标是如何依赖于名称相似的文件(一般来说除去后缀信息,其目标与依赖文件的名称是一样的),并调用命令来创建或更新目标,比如 %.o :...,这样当头文件信息改变后,make程序就知道如何更新目标文件了,而不是整个进行重编译,但这个操作可以看出是非常消耗时间及傻瓜式的,作为解决方案我们可以通过使用 编译器命令 –M选项来自动完成该工作,比如在

    3.2K11

    Makefile的详细介绍和使用

    https://www.cnblogs.com/LittleHann/p/3855905.html 规则是makefile中最重要的概念,其告诉make 目标文件的依赖关系,以及如何生成及更新这些目标文件...在makefile文件规则有2种,一种是显式规则,另一种是隐式规则。...显示规则 显式规则用于说明何时及如何重新生成目标,其列出了目标依赖的文件信息,并通过调用命令来创建或更新目标,其语法一般为: targets : prerequisites recipe … targets...:为要生成或更新的目标 prerequisites:为目标依赖的关系 recipe:为生成目标的命令, foo.o : foo.c defs.h cc -c -g foo.c 其中foo.o为target...上面的代码在linux的命令窗口下输入make命令就可以执行了,最终会生成一个test的可执行文件。如果需要清除生成的中间.o文件,输入make clean就可以全部清除了。

    60440

    Linux makefile 教程 非常详细,且易懂

    这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。...在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作的,他只管执行所定义的命令。...Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。...2、如果生成(或更新)foo.o文件。也就是那个cc命令,其说明了,如何生成foo.o这个文件。...但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。

    4.3K20

    使用 Gcov 和 LCOV 度量 CC++ 项目的代码覆盖率

    本篇分享如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率的度量,以及在之前 关于代码覆盖率(Code Coverage) 篇中没有提到的观点写在了本文最后的《不要高估代码覆盖率指标》...其中我比较深入的了解过 Squish Coco[1] 它如何使用,但对于大型项目,引入这类工具都或多或少的需要解决编译上的问题。...当我再次重新调查代码覆盖率的时候,我很惭愧的发现原来正在使用的 GCC 其实有内置的代码覆盖率的工具的,叫 Gcov[2] 前提条件 对于想使用 Gcov 的人,为了说明它是如何工作的,我准备了一段示例程序...生成报告 make report 生成报告的输出 sh-4.2$ make report gcov main.c foo.c File 'main.c' Lines executed:100.00%...旁注: 还有另外一个生成 HTML 报告的工具叫 gcovr[6],使用 Python 开发的,它的报告在显示方式上与 LCOV 略有不同。

    5.7K72

    Android Ndk and Opencv Development 2

    [2]Android.mk文件 Android.mk文件是用来描述源代码是如何进行编译的,ndk-build命令实际上对GNU Make命令的一个封装,所以,Android.mk文件的写法就类似Makefile...的写法[关于Make的详细内容可以看这本书,[GNU Make的中文手册],虽然是今年读的,但是我记得的也不多了,老了老了…] Android.mk文件可以生成一个动态链接库或者一个静态链接库,但是只有动态链接库是会复制到应用的安装包中的...你不需要列出头文件,也不需要显示指明要生成的目标文件之间的依赖关系(这些内容在GNU Make中是很重要的,虽然GNU Make中的隐式规则也可以做到)。...GNU Make的封装,它等价于make -f $NDK/build/core/build-local.mk [参数]命令。...解决方案就是删除NDK自带的awk工具(参考网址),这也就是第一节中使用ndk-build -v命令得到的GNU Make信息输出不同了,嘿嘿,我这伏笔埋的够深吧!

    81320

    全网最牛Linux内核Makefile系统文件详解(纯文字代码)

    这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。...在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作的,他只管执行所定义的命令。...Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1、显式规则。 显式规则说明了,如何生成一个或多的的目标文件。...2、如果生成(或更新)foo.o文件。也就是那个cc命令,其说明了,如何生成foo.o 这个文件。...如果命令太长,你可以使用反斜框(‘\’)作为换行符。make对一行上有多少个字符没有限制。规则告诉make两件事,文件的依赖关系和如何成成目标文件。

    3.3K20

    C++(STL):01---pair容器

    (p2)Copy构造函数,建立p成为p2的拷贝pairp(n)Move构造函数,将rv的内容移至p(允许隐式类型转 换) p=p2将p2赋值给p(始自C++11;允许隐式类型转换)P=rv...和val2的类型和数值 三、构造函数、赋值、移动语义 规则: ①定义pair时,不给出值时,使用默认构造函数初始化 ②使用圆括号/花括号初始化器进行初始化 默认构造函数 规则:默认构造函数生成一个pair...如果 版本3:隐式合成的,template形式的构造函数不会掩盖合成的拷贝构造函数。...0; } 使用pair创建对象,其元素型是绝对的;使用make_pair创建对象,其元素类型使用默认的。...: 隐式/显式构造返回 初始化器返回 使用make_pair创建pair对象返回 演示案例: pair process(vector &v) { if (

    1.9K20

    Using Automake and Autoconf「建议收藏」

    make 會用到您專案裡的 Makefile 這個檔案,這個檔案列出了各式的編譯以及連結步驟,目的,以及一些相依關係。多檔的專案與 GNU 的 make 工具程式是有很大的關係的。...你需要給定以 lib 字母為開頭的函式庫名稱,並且指定該函式庫的原始碼以及標頭檔,例如: noinst_LIBRARIES = libfoo.a libfoo_a_SOURCES = foo.h foo.cc...INCLUDES = -I@top_srcdir@/src/includes 注意 SOURCES 巨集會使用底線 ‘_’ 來代替函式庫的名稱的點 ‘.’。...而且要使用 top_srcdir 這個變數來參考到專案的最頂端。 5. 在上一層目錄使用 Makefile.am 的 LDADD 這個巨集,來連結任何可能用到這個暫時函式庫的 Code。...它是一個使用一個標準函式庫的 C++ 專案。 看看 autoconf 和 automake 的手冊來參閱使用到的一些巨集以及變數。我不要這些範例因為註解而變的難以閱讀。

    42420
    领券