- 博客(0)
- 资源 (20)
- 收藏
- 关注
GNU make manual
GNU make manual(English editon)
Table of Contents
1 Overview of make. . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 How to Read This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Problems and Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 An Introduction to Makefiles . . . . . . . . . . . . . . . 3
2.1 What a Rule Looks Like . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 A Simple Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 How make Processes a Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Variables Make Makefiles Simpler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 Letting make Deduce the Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.6 Another Style of Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.7 Rules for Cleaning the Directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Writing Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1 What Makefiles Contain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 What Name to Give Your Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Including Other Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 The Variable MAKEFILES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 The Variable MAKEFILE_LIST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Other Special Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.7 How Makefiles Are Remade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.8 Overriding Part of Another Makefile . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.9 How make Reads a Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.10 Secondary Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Writing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1 Rule Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Types of Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3 Using Wildcard Characters in File Names . . . . . . . . . . . . . . . . . . . . 24
4.3.1 Wildcard Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.2 Pitfalls of Using Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.3 The Function wildcard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4 Searching Directories for Prerequisites . . . . . . . . . . . . . . . . . . . . . . . 26
4.4.1 VPATH: Search Path for All Prerequisites. . . . . . . . . . . . . . . . . 27
4.4.2 The vpath Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4.3 How Directory Searches are Performed . . . . . . . . . . . . . . . . . . 28
4.4.4 Writing Shell Commands with Directory Search . . . . . . . . . . 29
4.4.5 Directory Search and Implicit Rules . . . . . . . . . . . . . . . . . . . . . 29
4.4.6 Directory Search for Link Libraries . . . . . . . . . . . . . . . . . . . . . . 30
4.5 Phony Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.6 Rules without Commands or Prerequisites. . . . . . . . . . . . . . . . . . . . 33
4.7 Empty Target Files to Record Events . . . . . . . . . . . . . . . . . . . . . . . . 33iv
GNU make
4.8 Special Built-in Target Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.9 Multiple Targets in a Rule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.10 Multiple Rules for One Target. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.11 Static Pattern Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.11.1 Syntax of Static Pattern Rules . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.11.2 Static Pattern Rules versus Implicit Rules . . . . . . . . . . . . . . 39
4.12 Double-Colon Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.13 Generating Prerequisites Automatically . . . . . . . . . . . . . . . . . . . . . 40
5 Writing the Commands in Rules . . . . . . . . . . . 43
5.1 Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.1 Splitting Command Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.1.2 Using Variables in Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2 Command Echoing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.3 Command Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3.1 Choosing the Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4 Parallel Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.5 Errors in Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.6 Interrupting or Killing make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.7 Recursive Use of make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.7.1 How the MAKE Variable Works . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.7.2 Communicating Variables to a Sub-make. . . . . . . . . . . . . . . . . 51
5.7.3 Communicating Options to a Sub-make . . . . . . . . . . . . . . . . . . 53
5.7.4 The ‘--print-directory’ Option. . . . . . . . . . . . . . . . . . . . . . . 54
5.8 Defining Canned Command Sequences . . . . . . . . . . . . . . . . . . . . . . . 55
5.9 Using Empty Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6 How to Use Variables . . . . . . . . . . . . . . . . . . . . . 57
6.1 Basics of Variable References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2 The Two Flavors of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.3 Advanced Features for Reference to Variables. . . . . . . . . . . . . . . . . 60
6.3.1 Substitution References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.3.2 Computed Variable Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.4 How Variables Get Their Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.5 Setting Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.6 Appending More Text to Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.7 The override Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.8 Defining Variables Verbatim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.9 Variables from the Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.10 Target-specific Variable Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.11 Pattern-specific Variable Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7 Conditional Parts of Makefiles . . . . . . . . . . . . . 71
7.1 Example of a Conditional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.2 Syntax of Conditionals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.3 Conditionals that Test Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
v
8 Functions for Transforming Text . . . . . . . . . . . 77
8.1 Function Call Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.2 Functions for String Substitution and Analysis . . . . . . . . . . . . . . . 78
8.3 Functions for File Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.4 Functions for Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.5 The foreach Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.6 The call Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.7 The value Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.8 The eval Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
8.9 The origin Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.10 The flavor Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.11 The shell Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.12 Functions That Control Make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9 How to Run make . . . . . . . . . . . . . . . . . . . . . . . . . 91
9.1 Arguments to Specify the Makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9.2 Arguments to Specify the Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9.3 Instead of Executing the Commands . . . . . . . . . . . . . . . . . . . . . . . . . 93
9.4 Avoiding Recompilation of Some Files . . . . . . . . . . . . . . . . . . . . . . . 94
9.5 Overriding Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.6 Testing the Compilation of a Program . . . . . . . . . . . . . . . . . . . . . . . 95
9.7 Summary of Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10 Using Implicit Rules . . . . . . . . . . . . . . . . . . . . 101
10.1 Using Implicit Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
10.2 Catalogue of Implicit Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
10.3 Variables Used by Implicit Rules . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10.4 Chains of Implicit Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
10.5 Defining and Redefining Pattern Rules . . . . . . . . . . . . . . . . . . . . . 108
10.5.1 Introduction to Pattern Rules . . . . . . . . . . . . . . . . . . . . . . . . 109
10.5.2 Pattern Rule Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
10.5.3 Automatic Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
10.5.4 How Patterns Match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.5.5 Match-Anything Pattern Rules . . . . . . . . . . . . . . . . . . . . . . . 113
10.5.6 Canceling Implicit Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
10.6 Defining Last-Resort Default Rules . . . . . . . . . . . . . . . . . . . . . . . . 114
10.7 Old-Fashioned Suffix Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.8 Implicit Rule Search Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
11 Using make to Update Archive Files . . . . . . 119
11.1 Archive Members as Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11.2 Implicit Rule for Archive Member Targets. . . . . . . . . . . . . . . . . . 119
11.2.1 Updating Archive Symbol Directories . . . . . . . . . . . . . . . . . 120
11.3 Dangers When Using Archives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
11.4 Suffix Rules for Archive Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
12 Features of GNU make . . . . . . . . . . . . . . . . . . 123
vi
GNU make
13 Incompatibilities and Missing Features . . . 127
14 Makefile Conventions . . . . . . . . . . . . . . . . . . . 129
14.1 General Conventions for Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . 129
14.2 Utilities in Makefiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
14.3 Variables for Specifying Commands . . . . . . . . . . . . . . . . . . . . . . . . 131
14.4 Variables for Installation Directories . . . . . . . . . . . . . . . . . . . . . . . 132
14.5 Standard Targets for Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
14.6 Install Command Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
2010-07-25
Understanding .NET A Tutorial And Analysis
Microsoft's .NET is revolutionizing Windows-based software development. Since its initial release in 2002, .NET has changed significantly, becoming the foundation for a new generation of Windows applications.
2009-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人