-
Makefile中另外的常用函数
所属栏目:[语言] 日期:2022-07-14 热度:80
之前学习过了 Makefile 中的字符串操作文件和文件名操作函数,我们今天再来看一下 Makefile 中的其他的函数。以下是这些函数的详细说明。 $(foreach var,list,text) 函数的功能是:把参数list中的单词逐一取出放到参数var所指定的变量中,然后再执行text所包[详细]
-
Makefile命令的编辑
所属栏目:[语言] 日期:2022-07-14 热度:85
通过上个章节的描述,我们已经知道了 Makefile 的规则是什么,他是由依赖关系规则和命令组成的。所使用的命令是由 shell 命令行组成,他们是一条一条执行的。多个命令之间要使用分号隔开,Makefile 中的任何命令都要以tab键开始。多个命令行之间可以有空行和[详细]
-
Makefile include文件包括
所属栏目:[语言] 日期:2022-07-14 热度:186
这个章节主要讲的是 Makefile 中包含其他的文件。包含其他文件使用的关键字是 include,和 C 语言包含头文件的方式相同。 当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefil[详细]
-
Makefile嵌套实行make
所属栏目:[语言] 日期:2022-07-14 热度:185
这个章节主要讲解的是在 Makefile 中嵌套执行 make。我们都知道在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,也就说很多的源文件被放置在了不同的目录下。每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模[详细]
-
嵌套执行make的示范
所属栏目:[语言] 日期:2022-07-14 热度:170
Makefile 中 嵌套执行 make 大部分是在大的工程项目中使用的,那么我们就通过一个大的项目工程来详细的分析一下如何嵌套执行 make。 假设有一个 MP3 player 的应用程序,它可以被划分为若干个组件:用户界面(ui)、编解码器(codec)以及数据管理库(db)。[详细]
-
make命令参数和选项大合集
所属栏目:[语言] 日期:2022-07-14 热度:168
我们在在执行 make 命令时,有的时候需要加上一下参数选项来保证我们的程序的执行,其实之前已经遇到过 make 在执行命令的时候需要添加上参数选项,比如只打印命令但不执行使用的参数是 -n ,还有只执命令不打印命令的参数选项是 -s,包含其它文件的路径参数[详细]
-
Makefile目标类别大汇总
所属栏目:[语言] 日期:2022-07-14 热度:178
这个章节主要讲解的是模式规则中的目标。规则中的目标形式是多种多样的,它可以是一个或多个的文件、可以是一个伪目标,这是我们之前讲到过的,也是经常使用的。其实规则目标还可以是其他的类型,下面是对这些类型的详细的说明。 强制目标 如果一个目标中没[详细]
-
Makefile变量的高级用处
所属栏目:[语言] 日期:2022-07-14 热度:135
我们之前已经学习过变量的定义和基本的赋值运算,我们可以更深入的了解一下变量的一些高级的用法。高级使用方法有两种:一种是变量的替换引用,一种是变量的嵌套引用。这是我们在使用的时候比较常见的两种使用方法,我们来具体分析使用一下变量的这两种高级[详细]
-
C++ 11是什么 C++ 11标准的原由
所属栏目:[语言] 日期:2022-07-13 热度:59
C++ 这门编程语言的历史可以追溯至 1979 年,当时的 Bjarne Stroustrup(C++ 之父,后续简称 Stroustrup)还在使用 Simula 语言进行开发工作。 Simula 语言被认为是第一个面向对象的编程语言。Stroustrup 也非常赞赏 Simula 语言的这种特性,但由于实例开发[详细]
-
C++ auto类型推导完全策略
所属栏目:[语言] 日期:2022-07-13 热度:99
在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、char 等;但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具体的类型,而是让编译器(或者解释器)自[详细]
-
C++ decltype类型推导完全战略
所属栏目:[语言] 日期:2022-07-13 热度:200
decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导。不了解 auto 用法的读者请转到《C++ auto》。 decltype 是declare type的缩写,译为声明类型。 既然已经有了 auto 关键字,为什么还需要 decltype 关键字呢?[详细]
-
C++返回值类型后置 跟踪返回值类别
所属栏目:[语言] 日期:2022-07-13 热度:153
在泛型编程中,可能需要通过参数的运算来得到返回值的类型。考虑下面这个场景: template typename R, typename T, typename U R add(T t, U u) { return t+u; } int a = 1; float b = 2.0; auto c = adddecltype(a + b)(a, b); 我们并不关心 a+b 的类型是什[详细]
-
C++11运用using定义别名 替代typedef
所属栏目:[语言] 日期:2022-07-13 热度:200
大家都知道,在 C++ 中可以通过 typedef 重定义一个类型: typedef unsigned int uint_t; 被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载: void func(unsigned int); void func(uint_t); // e[详细]
-
链接库是啥 动态链接库和静态链接库
所属栏目:[语言] 日期:2022-07-13 热度:163
静态链接库和动态链接库是最常用的两种共享代码的方法,从本节开始,您将系统地了解它们,并彻底搞清楚以下问题: 什么是库,什么是链接库,以及静态链接库和动态链接库的区别; 如何手动创建一个静态或者动态链接库; 如何在自己的项目中使用第三方提供的静[详细]
-
首个多线程程序
所属栏目:[语言] 日期:2022-07-13 热度:112
通过阅读《什么是线程》一节,我们了解了什么是线程以及什么是多线程。本节,我们教大家编写第一个多线程程序。 大多数操作系统都支持同时执行多个程序,包括常见的 Windows、Linux、Mac OS X 操作系统等。为了避免多个程序访问系统资源(包括文件资源、I/O[详细]
-
Makefile控制函数error与warning
所属栏目:[语言] 日期:2022-07-13 热度:113
Makefile 中提供了两个控制 make 运行方式的函数。其作用是当 make 执行过程中检测到某些错误时为用户提供消息,并且可以控制 make 执行过程是否继续。这两个函数是 error 和 warning,我们来详细的介绍一下这两个函数。 $(error TEXT...) 函数说明如下: 函[详细]
-
Makefile中寻常的错误信息
所属栏目:[语言] 日期:2022-07-13 热度:65
make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -、或者 make 使用 -k 选项执行时。make 执行过程的致命错误都带有前缀字符串 ***。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是 make);另外一种是当 Makefile 本身存在语法[详细]
-
Makefile文件是哪些
所属栏目:[语言] 日期:2022-07-12 热度:109
我们教程主要是讲的是 Makefile 。很多 Linux(Unix) 做开发的初学者不了解 Makefile 是什么,甚至大部分 Windows 开发工程师对 Makefile 都特别陌生。这个其实很正常,如果你是在 Windows 下作开发的话不需要去考虑这个问题,因为 Windows 下的集成开发环境[详细]
-
GDB catch命令 创立捕捉断点
所属栏目:[语言] 日期:2022-07-12 热度:60
要知道,GDB 调试器支持在被调试程序中打 3 种断点,分别为普通断点、观察断点和捕捉断点,其中普通断点用 break 命令建立(可阅读《GDB break》一节),观察断点用 watch 命令建立(可阅读《GDB watch》一节),本节将讲解如何使用 catch 命令建立捕捉断点[详细]
-
GDB条件断点 condition命令 解说
所属栏目:[语言] 日期:2022-07-12 热度:120
前面章节给大家介绍了 GDB 调试器中普通断点、观察断点以及捕捉断点的功能和用法。其中值得一提的是,对于普通断点的建立,可以使用如下格式的 break 命令: (gdb) break ... if cond ... 参数用于指定生成断点的具体位置;cond 参数用于代指某个表达式。通[详细]
-
GDB单步调节程序
所属栏目:[语言] 日期:2022-07-12 热度:103
《调用GDB调试器的几种方式》一节中提到,借助 next 命令可以控制 GDB 单步执行程序。所谓单步调试,就是通过一行一行的执行程序,观察整个程序的执行流程,进而尝试发现一些存在的异常或者 Bug。 根据实际场景的需要,GDB 调试器共提供了 3 种可实现单步调[详细]
-
GDB print和display命令 查视变量的值
所属栏目:[语言] 日期:2022-07-12 热度:141
前面章节中提到,使用 GDB 调试程序,最常用的方法是:单步调试或者断点调试程序,期间通过查看某个变量或者表达式的值,判断当前程序的执行过程是否正确,不断缩小异常或 Bug 位于代码中的范围,最终找到并修复。 对于在调试期间查看某个变量或表达式的值,[详细]
-
GDB禁用与删除断点
所属栏目:[语言] 日期:2022-07-12 热度:115
我们知道,GDB 调试器支持 3 种断点,分别为普通断点(用 break 命令创建)、观察断点(用 watch 命令建立)以及捕捉断点(用 catch 命令建立)。并且如果需要的话,我们可以在被调试程序中打多个断点,甚至于 GDB 允许在同一位置打多个断点。 这就产生一个[详细]
-
GDB handle命令 信号处置
所属栏目:[语言] 日期:2022-07-12 热度:81
C、C++ 程序中,信号常常作为进程间通信的一种重要手段。举个例子: #include stdio.h #include unistd.h #include signal.h void display(){ printf(http://c.biancheng.net/gdb/); } int main () { pid_t cpid; pid_t ppid; signal(SIGINT,display); if((c[详细]
-
GDB frame和backtrace命令 检查栈信息
所属栏目:[语言] 日期:2022-07-12 热度:175
当程序因某种异常停止运行时,我们要做的就是找到程序停止的具体位置,分析导致程序停止的原因。 对于 C、C++ 程序而言,异常往往出现在某个函数体内,例如 main() 主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都[详细]