- 让我们从一个例子来大概介绍make工具: 有个加密工具: encrypt.h void encrypt(char *message); 1 encrypt.c #include "encrypt.h" void encrypt(char *message){ while(*message){ *message = *message ^ 31; message++;... 让我们从一个例子来大概介绍make工具: 有个加密工具: encrypt.h void encrypt(char *message); 1 encrypt.c #include "encrypt.h" void encrypt(char *message){ while(*message){ *message = *message ^ 31; message++;...
- Makefile 规则中目标可以有多个。如需要生成多个可执行文件的做法。使用伪目标的方法,给伪目标指定所依赖的文件: all:main hello test .PHONY:all main: gcc -o main main.c hello: gcc -o hello hello.c test: gcc -o test test.c .PHONY:clean cle... Makefile 规则中目标可以有多个。如需要生成多个可执行文件的做法。使用伪目标的方法,给伪目标指定所依赖的文件: all:main hello test .PHONY:all main: gcc -o main main.c hello: gcc -o hello hello.c test: gcc -o test test.c .PHONY:clean cle...
- 概述 一个开发工程会有很多的源文件,它们按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。makefile文件关系到整个工程的编译规则。写好的makefile,只要运行make命令,就会按makefile里定义好的规则来编译工程。 make 是一个用来解析makefile... 概述 一个开发工程会有很多的源文件,它们按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。makefile文件关系到整个工程的编译规则。写好的makefile,只要运行make命令,就会按makefile里定义好的规则来编译工程。 make 是一个用来解析makefile...
- 在makefile规则的一般形式: 目标文件:依赖文件 执行命令 12 说明:执行命令会将依赖文件编译成目标文件。 而“伪目标”不是一个目标文件,只是一个标签而已。由于“伪目标”不是文件,所以 make无法生成它的依赖关系和决定它是否要执行,只能通过在执行make命令时显式地指明这个“目标”才能让其效。 伪目标例子: clean: rm *.o temp 12... 在makefile规则的一般形式: 目标文件:依赖文件 执行命令 12 说明:执行命令会将依赖文件编译成目标文件。 而“伪目标”不是一个目标文件,只是一个标签而已。由于“伪目标”不是文件,所以 make无法生成它的依赖关系和决定它是否要执行,只能通过在执行make命令时显式地指明这个“目标”才能让其效。 伪目标例子: clean: rm *.o temp 12...
- 当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢? 演示例子: r1:r2 r3 echo 1 r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错 r21: echo 21 r3:r31 echo 3 r31: echo 31 1234567891011 我... 当执行某个规则出现错误时,会马上停止该目标和该目标的依赖目标的生成。如何忽略错误,继续生成此目标之上的所有其它目标呢? 演示例子: r1:r2 r3 echo 1 r2:r21 echo 2 cat tes.txt #tes.txt不存在,故意指定这条出错 r21: echo 21 r3:r31 echo 3 r31: echo 31 1234567891011 我...
- 在上篇《make命令的自动推导》中,我们利用make的自动推导简化了makefile: OBJECTS = main.o hello.o app:$(OBJECTS) gcc -o app $(OBJECTS) main.o:hello.h hello.o:hello.h clean: rm app $(OBJECTS) 1234567 我们可以看到下面的内容,... 在上篇《make命令的自动推导》中,我们利用make的自动推导简化了makefile: OBJECTS = main.o hello.o app:$(OBJECTS) gcc -o app $(OBJECTS) main.o:hello.h hello.o:hello.h clean: rm app $(OBJECTS) 1234567 我们可以看到下面的内容,...
- make 支持三个通配符: * : 星号(*)代替了一系列的文件,如 *.c 表示所有后缀为 c 的文件。~ :波浪号(~ )在文件名中有特殊用途,如 ~/test 当前用户的家目录下的test目录(Linux环境下)。? 注意: CFILES = *.c 1 通配符同样可以用在变量中,但是 *.o 不会展开,所以CFILES的值就是 *.c 。在makefil... make 支持三个通配符: * : 星号(*)代替了一系列的文件,如 *.c 表示所有后缀为 c 的文件。~ :波浪号(~ )在文件名中有特殊用途,如 ~/test 当前用户的家目录下的test目录(Linux环境下)。? 注意: CFILES = *.c 1 通配符同样可以用在变量中,但是 *.o 不会展开,所以CFILES的值就是 *.c 。在makefil...
- makefile的介绍可以参考《makefile介绍及示例》 Makefile文件由五部分组成: 显式规则:显式指出生成的目标文件、依赖的文件、生成命令。隐式规则:利用make的自动推导功能,可以简化规则的编写,参考《make命令的自动推导》。变量定义:定义一系列的变量,可以在Makefile文件其他地方引用。文件指示:包括三部分,(1)一个是在一个 Makefil... makefile的介绍可以参考《makefile介绍及示例》 Makefile文件由五部分组成: 显式规则:显式指出生成的目标文件、依赖的文件、生成命令。隐式规则:利用make的自动推导功能,可以简化规则的编写,参考《make命令的自动推导》。变量定义:定义一系列的变量,可以在Makefile文件其他地方引用。文件指示:包括三部分,(1)一个是在一个 Makefil...
- GNU 的 make 可以自动推导文件以及文件依赖关系后面的命令。因此,我们就没必要在 每个 .o 文件后都写上类似的命令, make命令会自动识别,并进行推导命令。 当make命令看到一个 .o 文件,它就会自动把 .c 文件加在依赖关系中,例如make找到main.o,就可以推导出main.c就是main.o的依赖文件,并且推导出要执行的命令gcc -c main... GNU 的 make 可以自动推导文件以及文件依赖关系后面的命令。因此,我们就没必要在 每个 .o 文件后都写上类似的命令, make命令会自动识别,并进行推导命令。 当make命令看到一个 .o 文件,它就会自动把 .c 文件加在依赖关系中,例如make找到main.o,就可以推导出main.c就是main.o的依赖文件,并且推导出要执行的命令gcc -c main...
- 在声明变量时需要初始化。通过在变量名前加上 $ 符号引用变量,最好用上小括号 () 或 大括号 {} 把变量括起来。变量是大小写敏感的。 如果需要用 $ 字符,那么需要用 $$ 来表示。 变量可以使用在规则中的“目标”、“依赖”、“命令”中及新的变量中。如: CC = gcc OBJS = program.o foo.o utils.o program : $(OB... 在声明变量时需要初始化。通过在变量名前加上 $ 符号引用变量,最好用上小括号 () 或 大括号 {} 把变量括起来。变量是大小写敏感的。 如果需要用 $ 字符,那么需要用 $$ 来表示。 变量可以使用在规则中的“目标”、“依赖”、“命令”中及新的变量中。如: CC = gcc OBJS = program.o foo.o utils.o program : $(OB...
- 在Makefile文件中,我们的依赖关系中可能会包含一系列的头文件,当工程比较大时,我们必须搞清楚哪些.c文件包含了哪些头文件,在加入或删除这些头文件时,都要修改Makefile文件。这样的修改很麻烦,而且很容易修改错。 为了避免上面这种繁重又容易出错的工作,我们可以使用C/C++编译器自动寻找源文件中包含的头文件,并生成一个依赖关系 ,命令如下: gcc -MM ... 在Makefile文件中,我们的依赖关系中可能会包含一系列的头文件,当工程比较大时,我们必须搞清楚哪些.c文件包含了哪些头文件,在加入或删除这些头文件时,都要修改Makefile文件。这样的修改很麻烦,而且很容易修改错。 为了避免上面这种繁重又容易出错的工作,我们可以使用C/C++编译器自动寻找源文件中包含的头文件,并生成一个依赖关系 ,命令如下: gcc -MM ...
- 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。格式: <targets ...> : <target-pattern> : <prereq-patterns ...> <commands> ... 123 说明: <targets …>:指定一个或多个目标文件,可使用通... 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。格式: <targets ...> : <target-pattern> : <prereq-patterns ...> <commands> ... 123 说明: <targets …>:指定一个或多个目标文件,可使用通...
- 每条命令的开头必须以 Tab 键开头,除非命令是跟在依赖规则后的分号后面。在命令行之间中的空格或者空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。 如果我们在编译过程中,可以显示正在编译哪一步,就会很方便我们对程序编译的监控。我们可以使用makefile的一些显示命令,添加上一些类似注释的信息,伴随编译的过程打印到控制台... 每条命令的开头必须以 Tab 键开头,除非命令是跟在依赖规则后的分号后面。在命令行之间中的空格或者空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。 如果我们在编译过程中,可以显示正在编译哪一步,就会很方便我们对程序编译的监控。我们可以使用makefile的一些显示命令,添加上一些类似注释的信息,伴随编译的过程打印到控制台...
- 演示示例: app:main.o hello.o gcc -o app main.o hello.o main.o:main.c hello.h gcc -c main.c hello.o:hello.c hello.h gcc -c hello.c clean: rm app main.o hello.o 123456789 先让我们看看 app 的规则: a... 演示示例: app:main.o hello.o gcc -o app main.o hello.o main.o:main.c hello.h gcc -c main.c hello.o:hello.c hello.h gcc -c hello.c clean: rm app main.o hello.o 123456789 先让我们看看 app 的规则: a...
- 编译程序时,我们通常直接在makefile文件所在目录下执行make命令: makefile: app:main.o hello.o gcc -o app main.o hello.o main.o:main.c hello.h gcc -c main.c hello.o:hello.c hello.h gcc -c hello.c clean: rm app mai... 编译程序时,我们通常直接在makefile文件所在目录下执行make命令: makefile: app:main.o hello.o gcc -o app main.o hello.o main.o:main.c hello.h gcc -c main.c hello.o:hello.c hello.h gcc -c hello.c clean: rm app mai...
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
走进数据库:数据库基础知识精讲
2024/12/27 周五 16:00-17:30
Steven 华为云学堂技术讲师
数据管理是数据库的核心任务,本期直播将带领大家一起走进数据库,了解期发展趋势、基础模型、架构演进及相关的技术特点。同时还会介绍数据库对象和相关概念,帮助开发者对数据库使用和实践夯实基础。
去报名
热门标签