这是命令 makepp_faq 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
makepp_faq --关于makepp的常见问题
商品描述
在这里您可能会找到安装说明和一些不明显的要点
其余的文档。 这显示了绊脚石,而如何输入问题将
可以在食谱中找到。
得到 开始
其中 至 下载?
Makepp 托管在 SourceForge 上,可以作为源代码 tarball 或作为
Debian 安装包 deb文件。 基于 Linux 或 。转速 基于 Linux 的
http://sourceforge.net/projects/makepp/files/
像大量的 Perl 软件一样,makepp 也可以通过点击从 CPAN 下载
下载链接在 http://search.cpan.org/dist/makepp/
Makepp 是 Debian GNU/Linux 不稳定和测试的一部分。 这意味着您可以安装它
直接通过“apt-get install makepp”或从您喜欢的打包工具中选择它
像突触。
Makepp 是 archlinux 和 Gentoo Linux 的一部分。 请注意,发行版特定的后缀如
2.0-1 或 2.0-r1 不是候选发布版本 1,而是最终发布的 2.0 版本。
能够 I 尝试 it 也完全不需要 安装?
是的,如果您想在自己的 makefile 上尝试 makepp,请将目录放在您
将其解压缩到您的路径中,或者像这样显式运行它,使用绝对或
makepp 的相对路径:
perl /where/you/unpacked/it/makepp
创新中心 至 选择 perl的 版?
您的系统上必须有 Perl 5.8 或更新版本。 默认全部卸载
脚本将在您的路径中使用“perl”。 但是您可以使用显式实例运行它们
perl的。 测试运行器和安装将使用同一个实例运行所有内容。
/path/to/perl /where/you/unpacked/it/makepp
如果某些脚本无法正确识别正在运行的“perl”,您可以
通过“PERL”变量告诉它同一个 perl 实例的路径来帮助它:
PERL=/path/to/perl /path/to/perl /where/you/unpacked/it/makepp
这也可以是要在您的路径中搜索的实例,如果它不包含
目录分隔符:
PERL=perl5.16.2 perl5.16.2 /where/you/unpacked/it/makepp
创新中心 至 安装?
有两种安装方式,结果相同:
配置(别名 config.pl)
这允许传统风格的安装:
./configure && make test && make install
这两者之间的唯一区别是“配置”不是 Perl 脚本,因此您
不能说“perl configure”,而您可以使用上述所有变体,例如“perl
config.pl”。有效的选项是:
-b, --bindir=/路径/到/安装/bin
二进制文件的去向(默认: 字首/箱)。 Makepp 的二进制文件只是 Perl
脚本,因此它们与架构无关。 如果您提供此选项,但没有
“--prefix”,它将剥离 /箱 推导出一个 字首 对于其他默认值。
-d,--数据目录=/路径/到/安装/共享/makepp
在哪里安装 makepp 的库文件(默认: 字首/共享/makepp)。
-f, --findbin=相对/路径/to/datadir/from/bindir
在哪里可以找到与可执行文件相关的库,或者“无”(默认)来查找
他们在 数据目录.
-h,--html目录=/路径/到/安装/共享/html
HTML 文档的位置(默认: 字首/doc/makepp 如果 字首/ DOC
存在,否则 数据目录/html),或者如果您不想安装它,则为“无”。
-m, --mandir=/路径/到/人
手册页应驻留的位置(默认值: 字首/share/man 如果存在,否则
字首/man),或者如果您不想安装它们,则为“无”。
--生成文件=/路径/到/生成文件
指定可以写入 Makefile 的位置(默认值:.)。 不同于其他
选项,这是为下面的安装步骤记住的,这个文件被创建
立即。
-p,--前缀=/路径/到/安装
指定要安装所有内容的位置(默认: 在/ usr /本地)。 全部
其他路径默认是相对于这个路径的。
-V
- 版
打印版本号。
如果您想对某个 destdir 进行模型安装以打包您自己的
分布,你可以给最后一个命令一个额外的参数:
使 DESTDIR=/temporary/destdir 安装
安装文件
这是执行实际安装的后端。 你可以直接调用它:
./install.pl bindir datadir mandir htmldir findbin destdir
这些参数是可选的,对应于上一节中的选项。
系统会提示您输入未提供的内容,最后一个除外
通常需要。
生成文件
习惯文件 生成文件 目前仅出于技术原因存在。 它
将 而不去 帮你安装。 因此,唉,你不能使用像“cpanm”这样的工具来
一口气安装。
在某些系统上,您最终调用的“perl”可能是指向某些精确的符号链接
版本“perl5.mn”。 在这种情况下,perl 只能看到那个,因此将使用它来
安装反对。 如果您不希望那样,请使用如上所述的“PERL”变量。 如果
您使用第二个变体安装,即没有斜线的可执行文件的名称,
已安装的脚本将始终通过“/usr/bin/环境”。这让他们
启动稍微慢一点,以获得更大的灵活性。
为什么 不 安装 对工资盗窃 允许 否认?
如果你想安装到一个系统目录,比如 在/ usr, 在/ usr /本地 or /选择,您只能
如果您以 root 用户身份运行安装,请执行此操作。 在许多 Unices 上,您可以将命令运行为
根,通过在它前面加上“sudo”,并根据系统输入根
根据提示输入密码或您的密码。
这对于准备“configure”或“config.pl”步骤不是必需的,它只需要
写一个 生成文件 在当前目录中。
构建 有疑问吗?
什么是 旨在 不重要 目标?
Makepp 会记住每个文件的依赖关系。 如果其中任何一个需要重建,那
将在重新扫描之前完成。 但是如果构建失败,但扫描成功,因为
该文件甚至不再需要,然后最后失败将报告为
不重要。 (不应该尝试构建,而是让重新扫描完成那些
构建它认为是必要的,但这发生在不同的地方,所以这将是
难的。)
为什么 不 it 运行 Free Introduction 排除 3 次?
GNU make 没有 makepp 风格的多目标规则。 相反,它将此解释为快捷方式
对于三个单独的规则:
ABC:
回声 $@
触摸 abc
但是,它不会检查文件为何存在。 如果文件存在(并且比任何文件都新
依赖)很高兴。 三个文件中的任何一个首先被构建,提供
另外两个,所以这有点像多目标规则——但会导致竞争
并行构建中的条件。
类似的规则可能是:
ABC:
触摸 $@
Gmake 确实为每个所需文件运行一次。 不知道命令的作用
(它可能是一个内部创建一些文件的脚本),这两种情况不容易
由makepp区分。
因此,作为特殊的兼容性回退,如果多目标规则操作仅提及旧的
样式 $@ 和新样式 "$(output)" 或 "$(target)" 或它们的复数形式,它是
作为单独的规则处理。 然而,这意味着重复运行它,因为 makepp 忽略
随机出现的文件,没有元数据。
为什么 不 it 抱怨 这 a 创建 文件 is 假?
如果您有一个继续异步工作的命令,在它返回一个
成功返回代码,makepp 会注意到承诺的文件丢失并抱怨。 这个
通常也可能发生在某些网络文件系统上,这些系统可能只在物理上写入
几秒钟后。
如果你不能避免这种不满意的情况,你可以要求makepp马虎
关于这个检查与“--gullible”选项。 但是接下来的命令取决于
生成的文件可能仍然失败。
为什么 不 it 重新创建 档 不必要的?
我在 NFS 上观察到了这一点,其中由于文件属性缓存了
生成的文件还不是它最终拥有的文件。 在下一次运行中 makepp 注意到
差异并认为文件被过度修改。 这通过安装选项得到解决
“acregmin=0”,使属性立即可见。
这也可能发生在存储库中,例如,如果其他人已经在存储库中构建了
使用“umask 066”或使用禁止其他人读取生成的文件的编译器。
如果存储库或您的构建树共享公共路径,也会发生这种情况
带有一些依赖项的前缀(例如 /选择/存储库 和 /选择/一些工具,在这种情况下
makepp 会记住路径一次是相对的,一次是绝对的,看起来像改变了
依赖性。
儿童在 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 C 资源 文件 or 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 对象 文件 依赖 on 标题?
这取决于你的观点。 如果头文件中的原型发生变化,程序员可能有
来调整源代码。 因此,从这个角度来看,存在依赖性。
但是对于构建来说,这完全无关紧要。 这里的输出取决于输入。
如果头文件更改,这可能会影响目标文件(例如,添加带有
默认值,程序员可能会忽略,但编译器不会)。 所以从makepp的
观点只有生成的目标文件依赖于头文件,即必须在以下情况下重新构建
这些变化。
其他
为什么 不 制造商 选择 检测 依赖?
在这个规则中为什么 makepp make 产量 取决于 输入1,但不在 输入2?
输出:
猫输出
zcat 输入2 >>输出
扫描分为三个级别。 第一个是词法分析器,它试图理解
Shell 部分执行。 即调用哪些命令以及哪些 I/O 重定向
发生。 本通知 输入1 和 产量 (即使它没有被宣布为目标
本规则)。
下一步是命令解析器。 Makepp 有一些典型的编译命令。
这些检查命令行选项以了解命令将执行的操作。 在里面
处理它们获取依赖项,如库(“cc -llib”),包含路径(“cc -Idir”)
和输入文件。 “zcat”解析器的任务是知道“-S”需要一个
参数,但所有其他非选项词都是文件名(可选后缀为 。广州),
“--”结束选项。 唉,没有这样的解析器,不比其他数百个
命令。
某些语言的第三步是扫描输入文件,检测包含作为
进一步的依赖。 这不适用于本示例。
创新中心 能够 I 调试 马克?
您可以将“$(print )”放在可疑的表达式周围。 这将返回不变
表达式,同时打印它作为副作用。
您可以使用
"--dump-makefile=file" 选项,看看 makepp 如何看待它。
Makepp 会记录它所做的一切以及原因。 你可以用makepplog查看,
mppl 或 makeppgraph、mppg。 您可以通过设置环境使其更详细
变量“MAKEPP_DEBUG”。
Makepp 记录它所知道的关于文件的所有信息,以便在下次运行时重用。 虽然需要一些
了解makepp的内部结构,用makeppinfo、mppi为一个或多个转储
文件,通常会给出错误的线索。 “MAKEPP_DEBUG”另外提供了
“规则_源”。
如果您喜欢冒险,请使用来自 cvs 的 makepp。 这包括额外的模块
挂入“perl -d”以更好地显示 makepp 的内部结构。
Is it 安全 至 使用?
是,它将完全按照您的 makefile 所说的进行(许多程序员发现很难做到这一点)
理解,因为基于规则的推理与大多数编程范式非常不同)。
和 没有,如果你不相信你得到的 makefile,绝对不相信! makefile 很有趣
一种脚本,其目的是运行预期会修改您的命令
文件系统。 Makepp 没有办法检查他们会造成什么伤害。
更糟糕的是,有始终执行的语法,即使使用“--dry-run”(其中
不运行规则,但评估其他所有内容)。 那可能是这样的
这个:
bad_boy := $(shell rm *)
外置 工具
能够 I 使用 cc -M or GCC -毫米?
简短的回答是肯定的。 长的答案是他们的优势是知道
甚至最后一个奇怪的编译器选项的效果,以及隐藏在某些编译器中的子包含
内部目录,其中 makepp 非常接近。 缺点是它们
不知道构建规则,所以它们不能可靠地依赖尚未构建的文件,
其中包括要从存储库中获取的文件。 它们不能扩展到
其他语言,如 makepp 的扫描仪。 通常你至少过得一样好,而不是
诉诸这些工具。
尽管如此,一些编译器可以将其作为副产品生成。 如果你更愿意使用这个
见:包括。
能够 I 使用 缓存, 编译器缓存 or 缓存cc1?
简短的回答是肯定的。 长答案是这些程序需要重复工作
makepp 这样做,以获得可靠的文件指纹。 与传统使这甚至
来得太晚了,因为那些错过了许多需要重新编译的情况。 和
makepp 使用内置的构建缓存更容易,它具有额外的优势
它可以处理各种文件。
注意 ccache 直接模式有一个 bug https://bugzilla.samba.org/show_bug.cgi?id=8728
这将忽略包含路径的变化。 这使得 t/makeppreplay.test 失败
“错误的文件:出”。 导出“CCACHE_NODIRECT=1”以避免这种情况。
使用 onworks.net 服务在线使用 makepp_faq