GoGPT Best VPN GoSearch

OnWorks 网站图标

jmake - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 jmake

这是 jmake 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


jmake - 一个通用的 makefile 构建器

概要


杰作 [ CPP 选项 ]

商品描述


杰作 从一个包含在一个相当高级的描述中构建一个 makefile 生成文件 文件中。
生成的文件是一个 生成文件 而不是一个简单的makefile,这意味着它已经准备好了
配合使用 元配置。 特别是,诸如“从哪里到
安装可执行文件”将自动确定 配置 并且只有需要的
将考虑参数。

使用 杰作 你必须写一个 生成文件 首先,它描述了事情的发展方式
建成。 您的 生成文件 将通过 C pre- 包含在通用模板中
处理器。 这意味着您可以使用通常的 C /**/ 注释,但不能使用 shell #
注释。 C 注释不会出现在生成的 生成文件 但行开始
with ;# 最终将作为 shell 注释出现。 如果必须在字符串中写入 /*
产生 生成文件 那么你必须逃脱它(否则 杰作 会认为它是
C 注释的开头)。 只需在 * 前面放一个 #,如 /#*。

您可以使用一组宏,所有这些宏都列在索引中
文件,以及它们将扩展到的代码段。 通常,一个 生成文件 相当
小,因此比巨大的更容易维护 生成文件。 一些内部强大的命令
让您轻松编写可移植的makefile,而无需花费很多精力,
因为其他人已经为您完成了工作:-)。

当你想生成你的 makefile 时,你通常不运行 杰作 但是使用 jmkf
脚本是一个包装器,将调用 杰作 使用正确的选项。

所有的知识 杰作 保存在两个文件中:模板 jmake.tmpl 和宏
定义文件 Jmake.rules。 第一个文件包括第二个,以及
Jmakefile。 有时需要知道事情是如何工作的才能正确使用
提供的所有功能。 例如,您可能必须为一个
具体项目。 虽然您不能覆盖预定义的规则,但您可以扩展
Jmake.规则 文件或简单地将您的宏添加到您的 Jmakefile。 你也可以使用 的#include
当您想要共享这些宏并且不想复制代码时使用语句。

Jmake.rules 中的语法一点也不优雅,但是:

- 易于解析(如 sendmail.cf 或 troff 文件)。
- 规则不应该经常改变。
- 很简单,五分钟就能掌握。 :-)

这是一个小说明:

1)处理各种 CPP 实现:

· 最后的@!\ 表示:行尾,下一行从左边距开始。
· 最后@@\ 表示:行尾,下一行缩进一个制表符。

每行末尾应始终存在@!\ 或@@\ 之一。 唯一的
例外是用于作为规则体一部分的宏(例如
删除目标程序)。 在这种情况下,第一行(保存 #定义) 应该
以一个反斜杠结尾。

2) 符号定义:

· >SYMBOL:定义符号。
· ?象征: : 保持如果 SYMBOL 已定义。
· %象征: : 保持如果 SYMBOL 未定义。

?SYM 可以嵌套(逻辑 AND),如下所示:

?符号:%令牌:文本

如果 SYMBOL 已定义且 TOKEN 未定义,它将保留文本。 实施一个
逻辑或,见下文。

3) Makefile 目标测试:

·?目标?: : 保持伊夫 目标 被定义。
·%目标%: : 保持伊夫 目标 没有定义。

一个生成文件 目标 被定义为一个独立的目标,例如
依赖.local 目标,定义为:

依赖.本地:

另请注意,它仅对定义的目标有效 so 在生成的
生成文件。 它不是可用于测试目标的谓词
最终将在这一代中稍后定义。

4) 命令:

命令可以传递给 杰作. 它们以前导“|”开头。 可用命令
是:

· |后缀: 添加到 .SUFFIXES: 生成文件中的列表。

· |规则: : 添加到建筑规则部分。

· |规则: : 和以前一样,有一个前导标签。

· |skip:跳过文本直到找到以'-skip' 开头的行。

· |subst:开始行将被变量替换的部分,
直到找到“-subst”。 这意味着当 Makefile.SH 运行时,所有
$var 中的实例 SUBST 部分将被外壳替换。

· |shell:发出部分,直到在生成的部分中按原样匹配“-shell”
生成文件.SH。 这可能有助于准备 |案例 部分。 它不是
允许筑巢 部分。

· |case:这个命令后面必须跟一个shell变量名(没有它的
前导 '$' 符号)和大小写样式的模式,例如字符串“var in
f*”。它会在Makefile.SH上生成对应的“case”测试
"$var" 值,并且仅当此测试为真时,该部分才会到
运行 Makefile.SH 时在 Makefile 中生成匹配的“-case”。 它
可以嵌套 案件 部分自由。

· |展开: 展开行直到'-expand' . 一套完整的
示例如下所示。

· |一次: 直到 '-once' 的文本仅在第一次出现。

'|' 命令不能嵌套,除非另有说明。 特别是,由于
的简单实现 |跳过, 不可能放 |跳过 里面一个跳过
部分。 然而,一个 |一次 部分可能有 |跳过 部分。 允许嵌套
|案例 部分随意。

这是一种实现逻辑 OR 的方法:

/* 实现 SYMBOL 或不 TOKEN */
?SYMBOL:text /* 如果是 SYMBOL 则保留文本 */
%SYMBOL:|跳过
%TOKEN:text /* 如果不是 TOKEN 则保留文本 */
-跳过

实际上,这很丑陋,因为文本必须出现两次。 幸运的是,我做到了
不使用该构造。 :-)

事实上,正如您肯定已经猜到的,实现逻辑 OR 的最佳方法
是使用德摩根定律:

not (p or q) <=> 不是 p 也不是 q

/* 实现 SYMBOL 或不 TOKEN (尝试 #2) */
%SYMBOL:?TOKEN:|跳过
text /* 如果 SYMBOL 或不是 TOKEN */
-跳过

谁说他们不在乎逻辑? ;-)

扩展是通过 扩大 命令。 提供它是为了避免一些
当你不得不重复一些愚蠢的行时,makefile 中的繁琐写作
例如,文件名不同。 我们先来看一个例子:

|展开一个!foo 吧! 是不是!
!一种::
回声!a,!b
-扩张

然后将打印两个规则,第一个的 (a,b) 的值将是 (foo,
是的),第二个(酒吧,否)。 替换由 '!' 控制特点。
如果要替换的单词是另一个单词的一部分,请使用 ^^ 构造分离
如:!b^^c。 可以在文件中使用 Makefile 宏, 和他们
将由 jmake 扩展。 如果这不是您想要的,请转义第一个 '$' 符号
(这是一个 Makefile 转义,即您必须将 '$' 加倍,而不是在它前面加上
反斜杠)。 A // 代表空替换值。
^^^ 构造的行为类似于 ^^,即它被剥离,但它也删除了任何
^^^ 后面的空格。 如果你在宏参数前面加上一些东西,
并且那个宏参数在它之前写有空格,那么这会让你
在该参数的最终值之前连接一些东西。

这是另一个示例,显示了如何使用宏扩展。 这是
定义于 Jmake.规则 如:

#define 展开(规则,模式)@!\
|展开模式@!\
规则 @!\
-扩张

所以我们可以写在 生成文件:

|跳过
A = foo 酒吧
-跳过

#define 规则@!\
$(DIR)/!a^^.o: !a^^.o @@\
$(CC) -c !a^^.c @@\
$(MV)!a^^.o $(DIR)

展开(规则,a!$(A)!)

这将在 生成文件:

$(DIR)/foo.o: foo.o
$(CC) -c foo.c
$(MV) foo.o $(DIR)

$(DIR)/bar.o: 酒吧.o
$(CC) -c 酒吧.c
$(MV) 酒吧.o $$(DIR)

'A' 声明被包围 跳过,这样它就不会出现在
生成 Makefile.SH,但它会被 杰作 等加工。为
模式中的替代。

扩展的数量由可能的值的数量决定
第一 范围。 如果其他参数的替代值较少,它们将得到
空的。

可以在“-expand”的末尾添加正则表达式。 这个常规
表达式将从每行末尾的最终扩展集中删除。
也可以使用语法在扩展项中进行替换
(如果 'f' 是扩展变量) !f:= 协调 是两个常规
表达式(没有空格)。 图案 将被模式取代
(只有第一次出现将被替换)。

最后,您可以在扩展部分中引用其值被计算的变量
通过另一个扩展,这使得定义泛型变得容易 生成文件.

计费示例:

src = foo.c bar.c
对象 = \
|展开 f!$(SRC)!
!f:\.c=\.o\
-扩张 \\
公司 = \
|展开 f!$(OBJ)!
!f:\.o=\.h\
-扩张 \\

这将在 生成文件:

src = foo.c bar.c
对象 = \
富.o \
酒吧
公司 = \
富.h \
酒吧.h

不要忘记保护正则表达式中的特殊字符,例如
反斜杠、点等...

这个 一旦 命令用名称标记。 名字第一次出现,一次
构造被忽略,直到 '-once' 的文本将被复制到生成的
生成文件.SH。 但是,以后出现的同名将被忽略(一旦
会表现得像 跳过).

计费示例:

|一旦 this_is_a_name

-一次

这个 命令可用于在 Makefile.SH 中生成 shell 片段。 为了
例如,Jmakefile 中的以下部分:

|壳
案例“$d_usegtk1”
定义) glib=1; gtk=1;;
ESAC
-贝壳

将导致 Makefile.SH 中封闭片段的生成计算
的价值 格里布GTK 基于配置变量的变量
d_usegtk1 通过运行配置来设置。

反过来,这可以用于后续 案件 部分激活部分
Makefile 仅在使用 glib-1.x 为 GTK1 构建时:

|案例 1 中的花言巧语
显示:
echo "为 glib-1.x 构建"
-案件

本节将在 Makefile.SH 中生成如下内容:

!不!订阅!
案例“$ glib”在
1)
$spitshell >>Makefile <<'!NO!SUBS!'
显示:
echo "为 glib-1.x 构建"
!不!订阅!
;;
ESAC
$spitshell >>Makefile <<'!NO!SUBS!'

而在运行 Makefile.SH 时,上面的“显示”规则只会出现在
为 glib-1.x 构建。 决赛形式 生成文件 因此可以依赖于
配置选项选择时 配置 被运行。

5) 初始化:

· + : 将整行放在初始化部分。
·++符号: 添加到符号宏。

6) 用户自定义变量:

用户可以定义 CFLAGS、LDFLAGS 或 DPFLAGS 作为在 C 中使用的附加标志
编译、链接阶段或依赖目标。 因此可以添加一些额外的
-I 或特定子目录中 Makefile 的库等标志。

使用 onworks.net 服务在线使用 jmake


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。