convert byte array to pdf mvc : Convert pdf to web pages control software platform web page windows asp.net web browser make8-part2020

Chapter 6: How to Use Variables
71
6.11 Target-specific Variable Values
Variable values in make are usually global; that is, they are the same regardless of where
they are evaluated (unless they’re reset, of course). One exception to that is automatic
variables (seeSection10.5.3[AutomaticVariables],page120).
The other exception is target-specific variable values. This feature allows you to define
different values for the same variable, based on the target that make is currently building.
As with automatic variables, these values are only available within the context of a target’s
recipe (and in other target-specific assignments).
Set a target-specific variable value like this:
target ... : variable-assignment
Target-specific variable assignments can be prefixed with any or all of the special key-
words export, override, or private; these apply their normal behavior to this instance of
the variable only.
Multiple target values create a target-specific variable value for each member of the
target list individually.
The variable-assignment can be any valid form of assignment; recursive (‘=’), simple
(‘:=’ or ‘::=’), appending (‘+=’), or conditional (‘?=’). All variables that appear within the
variable-assignment are evaluated within the context of the target: thus, any previously-
defined target-specific variable values will be in effect. Note that this variable is actually
distinct from any “global” value: the two variables do not have to have the same flavor
(recursive vs. simple).
Target-specific variables have the same priority as any other makefile variable. Variables
provided on the command line (and in the environment if the ‘-e’ option is in force) will
take precedence. Specifying the override directive will allow the target-specific variable
value to be preferred.
There is one more special feature of target-specific variables: when you define a target-
specific variable that variable value is also in effect for all prerequisites of this target, and
all their prerequisites, etc. (unless those prerequisites override that variable with their own
target-specific variable value). So, for example, a statement like this:
prog : CFLAGS = -g
prog : prog.o foo.o bar.o
willset CFLAGS to ‘-g’ in the recipe for prog, but it will also set CFLAGS to ‘-g’ in the recipes
that create prog.o, foo.o, and bar.o, and any recipes which create their prerequisites.
Be aware that a given prerequisite will only be built once per invocation of make, at
most. If the same file is a prerequisite of multiple targets, and each of those targets has
adifferent value for the same target-specific variable, then the first target to be built will
cause that prerequisite to be built and the prerequisite will inherit the target-specific value
from the first target. It will ignore the target-specific values from any other targets.
6.12 Pattern-specific Variable Values
In addition to target-specific variable values (seeSection6.11[Target-specificVariableVal-
ues], page 71), GNU U make supports pattern-specific variable values. . In n this form, the
variable is defined for any target that matches the pattern specified.
Set a pattern-specific variable value like this:
Convert pdf to web pages - control software platform:C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net, ASP.NET MVC, WinForms, WPF application
How to Convert PDF to HTML Webpage with C# PDF Conversion SDK
www.rasteredge.com
Convert pdf to web pages - control software platform:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.net, ASP.NET MVC, WinForms, WPF application
PDF to HTML Webpage Converter SDK for VB.NET PDF to HTML Conversion
www.rasteredge.com
72
GNU make
pattern ... : variable-assignment
where pattern is a %-pattern. As with target-specific variable values, multiple pattern
values create a pattern-specific variable value for each pattern individually. The variable-
assignment can be any valid form of assignment. Any command line variable setting will
take precedence, unless override is specified.
For example:
%.o : CFLAGS = -O
will assign CFLAGS the value of ‘-O’ for all targets matching the pattern %.o.
If a target matches more than one pattern, the matching pattern-specific variables with
longer stems are interpreted first. This results in more specific variables taking precedence
over the more generic ones, for example:
%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
lib/%.o: CFLAGS := -fPIC -g
%.o: CFLAGS := -g
all: foo.o lib/bar.o
In this example the first definition of the CFLAGS variable will be used to update
lib/bar.o even though the second one also applies to this target. Pattern-specific
variables which result in the same stem length are considered in the order in which they
were defined in the makefile.
Pattern-specific variables are searched after any target-specific variables defined explic-
itly for that target, and before target-specific variables defined for the parent target.
6.13 Suppressing Inheritance
As described in previous sections, make variables are inherited by prerequisites. This capa-
bility allows you to modify the behavior of a prerequisite based on which targets caused it
to be rebuilt. For example, you might set a target-specific variable on a debug target, then
running ‘make debug’ will cause that variable to be inherited by all prerequisites of debug,
while just running ‘make all’ (for example) would not have that assignment.
Sometimes, however, you may not want a variable to be inherited. For these situations,
make provides the private modifier. Although this modifier can be used with any variable
assignment, it makes the most sense withtarget- andpattern-specific variables. Any variable
marked private will be visible to its local target but will not be inherited by prerequisites
of that target. A global variable marked private will be visible in the global scope but will
not be inherited by any target, and hence will not be visible in any recipe.
As an example, consider this makefile:
EXTRA_CFLAGS =
prog: private EXTRA_CFLAGS = -L/usr/local/lib
prog: a.o b.o
Due to the private modifier, a.o and b.o will not inherit the EXTRA_CFLAGS variable
assignment from the prog target.
control software platform:C# PDF Convert to SVG SDK: Convert PDF to SVG files in C#.net, ASP
Instantly convert all PDF document pages to SVG image files in C#.NET class application. Perform high-fidelity PDF to SVG conversion in both ASP.NET web and
www.rasteredge.com
control software platform:C# PDF Page Insert Library: insert pages into PDF file in C#.net
Support adding and inserting one or multiple pages to existing PDF document. Support to create new page to PDF document in both web server-side application
www.rasteredge.com
Chapter 6: How to Use Variables
73
6.14 Other Special Variables
GNU make supports some variables that have special properties.
MAKEFILE_LIST
Contains the name of each makefile that is parsed by make, in the order in
which it was parsed. The name is appended just before make begins to parse
the makefile. Thus, if the first thing a makefile does is examine the last word
in this variable, it will be the name of the current makefile. Once the current
makefile has used include, however, the last word will be the just-included
makefile.
If a makefile named Makefile has this content:
name1 := $(lastword $(MAKEFILE_LIST))
include inc.mk
name2 := $(lastword $(MAKEFILE_LIST))
all:
@echo name1 = $(name1)
@echo name2 = $(name2)
then you would expect to see this output:
name1 = Makefile
name2 = inc.mk
.DEFAULT_GOAL
Sets the default goal to be used if no targets were specified on the command line
(seeSection9.2[ArgumentstoSpecifytheGoals],page99). The .DEFAULT_
GOAL variable allows you to discover the current default goal, restart the default
goalselection algorithmby clearing its value, or to explicitly set the default goal.
The following example illustrates these cases:
control software platform:C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
a more suitable choice for publishing in web services than Using this C#.NET PDF to JPEG conversion library C# developers can easily and quickly convert a large
www.rasteredge.com
control software platform:C# HTML5 Viewer: Load, View, Convert, Annotate and Edit PDF
HTML5 Viewer for C# .NET is an advanced web viewer of rich annotation functionalities. To view, convert, edit, process, protect, sign PDF files, please
www.rasteredge.com
74
GNU make
# Query the default goal.
ifeq ($(.DEFAULT_GOAL),)
$(warning no default goal is set)
endif
.PHONY: foo
foo: ; @echo $@
$(warning default goal is $(.DEFAULT_GOAL))
# Reset the default goal.
.DEFAULT_GOAL :=
.PHONY: bar
bar: ; @echo $@
$(warning default goal is $(.DEFAULT_GOAL))
# Set our own.
.DEFAULT_GOAL := foo
This makefile prints:
no default goal is set
default goal is foo
default goal is bar
foo
Note that assigning more than one target name to .DEFAULT_GOAL is invalid
and will result in an error.
MAKE_RESTARTS
This variable is set only if this instance of make has restarted (seeSection3.5
[How Makefiles Are Remade], page 14):itwillcontainthenumberoftimesthis
instance has restarted. Note this is not the same as recursion (counted by the
MAKELEVEL variable). You should not set, modify, or export this variable.
MAKE_TERMOUT
MAKE_TERMERR
When make starts it will check whether stdout andstderr will show their output
on a terminal. If so, it will set MAKE_TERMOUT and MAKE_TERMERR, respectively,
to the name of the terminal device (or true if this cannot be determined). If set
these variables will be marked for export. These variables will not be changed
by make and they will not be modified if already set.
These values can be used (particularly in combination with output synchroniza-
tion (seeSection5.4.1[OutputDuringParallelExecution],page47) to deter-
mine whether make itself is writing to a terminal; they can be tested to decide
whether to force recipe commands to generate colorized output for example.
If youinvoke a sub-make and redirect its stdout or stderr it is your responsibility
to reset or unexport these variables as well, if your makefiles rely on them.
control software platform:XDoc.HTML5 Viewer, Create Web Doc & Image Viewer in C#.NET
PDF, VB.NET delete PDF pages, VB.NET convert PDF to SVG. VB.NET How-to, VB.NET PDF, VB.NET Word, VB to Use XDoc.HTML5 Viewer to Create a Customized Web Viewer in
www.rasteredge.com
control software platform:XDoc.HTML5 Viewer for .NET, Zero Footprint AJAX Document Image
View, Convert, Edit, Sign Documents and Images. Wide range of web browsers support including IE9+ powerful & profession imaging controls, PDF document, image to
www.rasteredge.com
Chapter 6: How to Use Variables
75
.RECIPEPREFIX
The first character of the value of this variable is used as the character make
assumes is introducing a recipe line. If the variable is empty (as it is by de-
fault) that character is the standard tab character. For example, this is a valid
makefile:
.RECIPEPREFIX = >
all:
> @echo Hello, world
The value of .RECIPEPREFIX can be changed multiple times; once set it stays
in effect for all rules parsed until it is modified.
.VARIABLES
Expands to a list of the names of all global variables defined so far. This
includes variables which have empty values, as well as built-in variables (see
Section 10.3 [Variables Used by Implicit Rules], page 115),butdoesnotinclude
any variables which are only defined in a target-specific context. Note that any
value you assign to this variable will be ignored; it will always return its special
value.
.FEATURES
Expands to a list of special features supported by this version of make. Possible
values include, but are not limited to:
‘archives’
Supports ar (archive) files using special file name syntax. See
Chapter 11 [Using make to Update Archive Files], page 129.
‘check-symlink’
Supports the -L (--check-symlink-times) flag. SeeSection9.7
[Summary of Options], page 104.
‘else-if’ Supports “else if” non-nested conditionals. SeeSection7.2[Syntax
of Conditionals], page 78.
‘jobserver’
Supports “job server” enhanced parallel builds. See Section 5.4
[Parallel Execution], page 47.
‘oneshell’
Supports the .ONESHELL special target. SeeSection 5.3.1 [Using
One Shell], page 44.
‘order-only’
Supports order-only prerequisites. SeeSection4.2[Types ofPre-
requisites], page 22.
‘second-expansion’
Supports secondary expansion of prerequisite lists.
‘shortest-stem’
Uses the “shortest stem” method of choosing which pattern, of
multiple applicable options, will be used. SeeSection10.5.4[How
Patterns Match], page 122.
control software platform:C# PDF: How to Create PDF Document Viewer in C#.NET with
Support rendering web viewer PDF document to images or svg file; Free to convert viewing PDF document to TIFF file for document management;
www.rasteredge.com
control software platform:DocImage SDK for .NET: Web Document Image Viewer Online Demo
Document Viewer Demo to View, Annotate, Convert and Print upload a file to display in web viewer Suppported files are Word, Excel, PowerPoint, PDF, Tiff, Dicom
www.rasteredge.com
76
GNU make
‘target-specific’
Supports target-specific and pattern-specific variable assignments.
SeeSection6.11[Target-specificVariableValues],page71.
‘undefine’
Supports the undefine directive. SeeSection6.9[UndefineDirec-
tive], page 69.
‘guile’
Has GNU Guile available as an embedded extension language. See
Section 12.1 [GNU Guile Integration], page 133.
‘load’
Supports dynamically loadable objects for creating custom exten-
sions. SeeSection12.2[LoadingDynamicObjects],page135.
.INCLUDE_DIRS
Expands to a list of directories that make searches for included makefiles (see
Section 3.3 [Including Other Makefiles], page 13).
control software platform:C# Imaging - Scan Barcode Image in C#.NET
Recognize PDF-417 2D barcode in .NET WinForms & ASP.NET web applications using C# programming code. C# QR Code Barcode Image Reading.
www.rasteredge.com
Chapter 7: Conditional Parts of Makefiles
77
7 Conditional Parts of Makefiles
Aconditional directive causes part of a makefile to be obeyed or ignored depending on the
values of variables. Conditionals can compare the value of one variable to another, or the
value of a variable to a constant string. Conditionals control what make actually “sees” in
the makefile, so they cannot be used to control recipes at the time of execution.
7.1 Example of a Conditional
The following example of a conditional tells make to use one set of libraries if the CC variable
is ‘gcc’, and a different set of libraries otherwise. It works by controlling which of two recipe
lines will be used for the rule. The result is that ‘CC=gcc’ as an argument to make changes
not only which compiler is used but also which libraries are linked.
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
This conditional uses three directives: one ifeq, one else and one endif.
The ifeq directive begins the conditional, and specifies the condition. It contains two
arguments, separated by a comma and surrounded by parentheses. Variable substitution
is performed on both arguments and then they are compared. The lines of the makefile
following the ifeq are obeyed if the two arguments match; otherwise they are ignored.
The else directive causes the following lines to be obeyed if the previous conditional
failed. In the example above, this means that the second alternative linking command
is used whenever the first alternative is not used. It is optional to have an else in a
conditional.
The endif directive ends the conditional. Every conditional must end with an endif.
Unconditional makefile text follows.
As this example illustrates, conditionals work at the textual level: the lines of the con-
ditional are treated as part of the makefile, or ignored, according to the condition. This is
why the larger syntactic units of the makefile, such as rules, may cross the beginning or the
end of the conditional.
When the variable CC has the value ‘gcc’, the above example has this effect:
foo: $(objects)
$(CC) -o foo $(objects) $(libs_for_gcc)
When the variable CC has any other value, the effect is this:
foo: $(objects)
$(CC) -o foo $(objects) $(normal_libs)
Equivalent results can be obtained in another way by conditionalizing a variable assign-
ment and then using the variable unconditionally:
78
GNU make
libs_for_gcc = -lgnu
normal_libs =
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo: $(objects)
$(CC) -o foo $(objects) $(libs)
7.2 Syntax of Conditionals
The syntax of a simple conditional with no else is as follows:
conditional-directive
text-if-true
endif
The text-if-true may be any lines of text, to be considered as part of the makefile if the
condition is true. If the condition is false, no text is used instead.
The syntax of a complex conditional is as follows:
conditional-directive
text-if-true
else
text-if-false
endif
or:
conditional-directive-one
text-if-one-is-true
else conditional-directive-two
text-if-two-is-true
else
text-if-one-and-two-are-false
endif
There can be as many “else conditional-directive” clauses as necessary. Once a given
condition is true, text-if-true is used and no other clause is used; if no condition is true then
text-if-false is used. The text-if-true and text-if-false can be any number of lines of text.
The syntax of the conditional-directive is the same whether the conditional is simple
or complex; after an else or not. There are four different directives that test different
conditions. Here is a table of them:
Chapter 7: Conditional Parts of Makefiles
79
ifeq (arg1, arg2)
ifeq ’arg1’ ’arg2’
ifeq "arg1" "arg2"
ifeq "arg1" ’arg2’
ifeq ’arg1’ "arg2"
Expand all variable references in arg1 and arg2 and compare them. If they
are identical, the text-if-true is effective; otherwise, the text-if-false, if any, is
effective.
Often you want to test if a variable has a non-empty value. When the value
results from complex expansions of variables and functions, expansions you
would consider empty may actually contain whitespace characters and thus are
not seen as empty. However, you can use the strip function (seeSection8.2
[Text Functions], page 84) to avoid interpreting g whitespace as s a a non-empty
value. For example:
ifeq ($(strip $(foo)),)
text-if-empty
endif
will evaluate text-if-empty even if the expansion of $(foo) contains whitespace
characters.
ifneq (arg1, arg2)
ifneq ’arg1’ ’arg2’
ifneq "arg1" "arg2"
ifneq "arg1" ’arg2’
ifneq ’arg1’ "arg2"
Expand all variable references in arg1 and arg2 and compare them. If they
are different, the text-if-true is effective; otherwise, the text-if-false, if any, is
effective.
ifdef variable-name
The ifdef form takes the name of a variable as its argument, not a reference
to a variable. The value of that variable has a non-empty value, the text-if-true
is effective; otherwise, the text-if-false, if any, is effective. Variables that have
never been defined have an empty value. The text variable-name is expanded,
so it could be a variable or function that expands to the name of a variable.
For example:
bar = true
foo = bar
ifdef $(foo)
frobozz = yes
endif
The variable reference $(foo) is expanded, yielding bar, which is considered
to be the name of a variable. The variable bar is not expanded, but its value
is examined to determine if it is non-empty.
Note that ifdef only tests whether a variable has a value. It does not expand
the variable to see if that value is nonempty. Consequently, tests using ifdef
80
GNU make
return true for all definitions except those like foo =. To test for an empty
value, use ifeq ($(foo),). For example,
bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif
sets ‘frobozz’ to ‘yes’, while:
foo =
ifdef foo
frobozz = yes
else
frobozz = no
endif
sets ‘frobozz’ to ‘no’.
ifndef variable-name
If the variable variable-name has an empty value, the text-if-true is effective;
otherwise, the text-if-false, if any, is effective. The rules for expansion and
testing of variable-name are identical to the ifdef directive.
Extra spaces are allowed and ignored at the beginning of the conditional directive line,
but a tab is not allowed. (If the line begins with a tab, it will be considered part of a recipe
for a rule.) Aside from this, extra spaces or tabs may be inserted with no effect anywhere
except within the directive name or within an argument. A comment starting with ‘#’ may
appear at the end of the line.
The other two directives that play a part in a conditional are else and endif. Each of
these directives is written as one word, with no arguments. Extra spaces are allowed and
ignored at the beginning of the line, and spaces or tabs at the end. A comment starting
with ‘#’ may appear at the end of the line.
Conditionals affect which lines of the makefile make uses. If the condition is true, make
reads the lines of the text-if-true as part of the makefile; if the condition is false, make
ignores those lines completely. It follows that syntactic units of the makefile, such as rules,
may safely be split across the beginning or the end of the conditional.
make evaluates conditionals when it reads a makefile. Consequently, you cannot use
automatic variables in the tests of conditionals because they are not defined until recipes
are run (seeSection10.5.3[AutomaticVariables],page120).
To prevent intolerable confusion, it is not permitted to start a conditionalin one makefile
and end it in another. However, you may write an include directive within a conditional,
provided you do not attempt to terminate the conditional inside the included file.
7.3 Conditionals that Test Flags
You canwrite a conditionalthat tests make commandflags such as ‘-t’ by using the variable
MAKEFLAGS together with the findstring function (see Section8.2 [Functions for String
Documents you may be interested
Documents you may be interested