Using Implicit Rules

Letting make Deduce the Commands

It has an implicit rule for updating a .o file from a correspondingly named .c file using a cc -c command.
For example, it will use the command cc -c main.c -o main.o to compile main.c into main.o.
We can therefore omit the commands from the rules for the object files.

When a .c file is used automatically in this way, it is also automatically added to the list of prerequisites.
We can therefore omit the .c files from the prerequisites, provided we omit the commands.

# makefile中就一行
main:main.o
# 此时执行make
[root@kafka100 cpp]# make
cc -c -o main.o main.c
cc main.o -o main
# Because you mention main.o but do not give a rule for it, make will automatically look for an implicit rule that
# tells how to update it. 

# makefile中就一行
main:
# 此时执行make
[root@kafka100 cpp]# make
cc main.c -o main
The built-in implicit rules use several variables in their recipes so that, by changing the values of the
variables, you can change the way the implicit rule works.
You can define your own implicit rules by writing pattern rules.

Defining and Redefining Pattern Rules

You define an implicit rule by writing a pattern rule.
A pattern rule looks like an ordinary rule, except that its target contains the character '%'.

the '%' matches any nonempty substring, while other characters match only themselves.
A target pattern is composed of a '%' between a prefix and a suffix, either or both of which may be empty.
's.%.c' as a pattern matches any file name that starts with 's.', ends in '.c' and is at least five characters long.
(There must be at least one character to match the '%'.) 
The substring that the '%' matches is called the stem.
'%' in a prerequisite of a pattern rule stands for the same stem that was matched by the '%' in the target.

# 不需要任何先决条件包含%,或者不需要任何先决条件
A pattern rule need not have any prerequisites that contain '%', or in fact any prerequisites at all.
Such a rule is effectively a general wildcard.

Automatic Variables

It’s very important that you recognize the limited scope in which automatic variable values are available:
they only have values within the recipe.

$@:The file name of the target of the rule.
$<:The name of the first prerequisite.
$^:The names of all the prerequisites, with spaces between them.
$?:The names of all the prerequisites that are newer than the target, with spaces between them.
If the target does not exist, all prerequisites will be included.

https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html
https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 17:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 17:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 17:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 17:18:02       20 阅读

热门阅读

  1. WTN6040F-8S语音芯片:投篮游戏机新时代引领者

    2023-12-17 17:18:02       41 阅读
  2. macos苹果电脑开启tftp server上传fortigate60e固件成功

    2023-12-17 17:18:02       33 阅读
  3. 使用Yellowbrick绘制获取最佳聚类K值的示例

    2023-12-17 17:18:02       39 阅读
  4. 【vue filters 过滤器】vue页面 全局使用

    2023-12-17 17:18:02       38 阅读
  5. RK3568-PWM

    2023-12-17 17:18:02       38 阅读
  6. Optee在嵌入式系统中是否支持多线程机制

    2023-12-17 17:18:02       41 阅读
  7. Word Excel模版引擎

    2023-12-17 17:18:02       51 阅读
  8. 设计模式——原型模式代码示例

    2023-12-17 17:18:02       36 阅读
  9. 通过接口引用对象

    2023-12-17 17:18:02       35 阅读
  10. 一句话分清C/C++声明和定义

    2023-12-17 17:18:02       41 阅读