rule: General creator of an instance of the S3 'rmake.rule' class

View source: R/rule.R

ruleR Documentation

General creator of an instance of the S3 rmake.rule class

Description

A rule is an atomic element of the build process. It defines a set of target file names to be built with a given build command from a given set of depends files that the targets depend on, and which can be removed by a given clean command.

Usage

rule(
  target,
  depends = NULL,
  build = NULL,
  clean = NULL,
  task = "all",
  phony = FALSE,
  type = ""
)

Arguments

target

A character vector of target file names that are created by the given build command

depends

A character vector of file names the build command depends on

build

A shell command that runs the build of the given target

clean

A shell command that erases all files produced by the build command

task

A character vector of parent task names. The mechanism of tasks allows grouping rules. Anything different from 'all' will cause the creation of a new task depending on the given rule. Executing ⁠make taskname⁠ will then force building this rule.

phony

Whether the rule has a PHONY (i.e., non-file) target. A rule should be marked with phony if the target is not a file name that would be generated by the build commands. E.g., all or clean are phony targets. Also, all targets representing tasks (see task above) are phony.

type

A string representing a type of rule used e.g. when printing a rule in an easily readable format. For instance, rRule() uses R, markdownRule() uses markdown, etc.

Details

If there is a need to group some rules together, one can assign them the same task identifier in the task argument. Each rule may be assigned one or more tasks. Tasks may then be built by executing ⁠make task_name⁠ on the command line, which forces rebuilding of all rules assigned to task 'task_name'. By default, all rules are assigned to task all, which causes the ⁠make all⁠ command to build everything.

Value

Instance of S3 class rmake.rule

Author(s)

Michal Burda

See Also

makefile(), inShell()

Examples

r <- rule(target='something.abc',
          depends=c('file.a', 'file.b', 'file.c'),
          build='myCompiler file.a file.b file.c -o something.abc',
          clean='$(RM) something.abc')

# generate the content of a makefile (as character vector)
makefile(list(r))

# generate to file
tmp <- tempdir()
makefile(list(r), file.path(tmp, "Makefile"))

rmake documentation built on Nov. 12, 2025, 9:06 a.m.