GoGPT Best VPN GoSearch

OnWorks 网站图标

makepp_build_algorithm - 云端在线

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

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

程序:

您的姓名


makepp_build_algorithm -- makepp 如何执行 makefile

商品描述


Makepp 的内部结构在根本上不同于标准的 Unix make。 这一页
详细描述了不同的哲学。

逆转 前锋 推理
Makepp 与标准 Unix make 的工作方向相反。 传统的 Unix 制造
给定一个要构建的目标,然后它会找到一个与其中的字符匹配的规则
目标文件名。 如果目标比规则的任何依赖项都旧,则它
重建。

例如,考虑以下模式规则:

%.o: %.cxx
$(CXX) $(CXXFLAGS) -c $(输入) -o $(输出)

当 make 意识到它需要创建一个名为“xyz.o”的文件时,它会在它的列表中搜索
模式规则,直到它看到“xyz.o”匹配模式“%.o”,然后它应用
这个规则。

Makepp 的工作方向相反。 它首先计算它可能的所有文件
通过应用与依赖文件名中的字符匹配的规则来构建。 那么当
它需要构建一个文件,它只是查看它是否是它知道的文件之一
如何建造。 已知文件列表基于绝对文件名存储。

当makepp遇到上述模式规则时,它会搜索目录中的所有文件
匹配模式“%.cxx”(即“*.cxx”)。 对于这些文件中的每一个,它都会记住
它可以生成相应的“.o”文件。 如果随后 makepp 发现它
可以创建另一个当前不存在的“.cxx”文件,此规则也将适用
并且相应的“.o”文件将被标记。

这可能看起来有些低效,但事实证明在大多数情况下并没有那么慢,
并且通常可以构建的几乎所有文件实际上都是构建的。
并且知道可以构建的文件的完整列表有几个优点:

· 通配符可以匹配尚不存在但可以构建的文件。

· 自动依赖扫描器检测到的头文件没有
存在; makepp 知道他们会在哪里。 (这个问题的大多数其他解决方案
假设任何尚不存在的标题都在当前目录中。)

· 存储库实现起来要简单得多,因为 makepp 事先知道它是什么文件
可以使。 (有关详细信息,请参阅 makepp_repositories。)

· 可以轻松确定可以构建哪些文件(请参阅
“$(only_targets)”函数。

· Makepp 的“$(infer_objects)”函数通过知道对象是什么而大大简化
可用。

文字的 模式
Makepp 将构建命令与目标文件相关联,而不是与文本模式相关联
文档名称。 因此,它不会被同一文件的不同名称混淆。 因此,对于
例如,makepp 会知道“./xyz”和“xyz”是同一个文件,而其他 make
公用事业可能不会。

这一点特别重要,因为(与标准 make 不同)makepp 加载 makefile
来自不同的目录。 为了使makefile相对独立,用
顶级makefile没有特殊位置,每个makefile都指向所有文件
相对于它自己的目录。 因此,如果您从子目录加载 makefile
“other_stuff”,而那个 makefile 指的是“../xyz”,makepp 会再次意识到它是
上面提到的同一个文件。 (它也不会被软链接目录混淆
名字。)

存储 建立 信息
Makepp 存储有关它构建的每个文件的更多信息,而不仅仅是日期
邮票(这是标准制作所关心的全部)。 这些信息包括:

· 这个文件在最后一次构建时的签名,所以我们知道文件本身是否有
改变。

· 每个依赖文件的名称,包括包含文件和推断的其他文件
自动地。 如果此列表发生更改,则 makepp 假定它需要重建。

· 每个依赖项的签名。 这样,makepp 不仅知道在
依赖项比目标新,但是当它们发生变化时。 这也使得
可以使用其他类型的签名,例如加密校验和,而不是
比文件日期。

· 整个构建命令(及其 cwd)。 这样,如果您更改构建命令
(例如,更改编译器选项),即使文件
自己没有改变。

· 架构。 如果你已经在 Linux 上编译了你的程序,然后切换到
Solaris,makepp 自动知道要重新编译所有内容。

Makepp 在它接触的每个目录中创建一个名为“.makepp”的子目录。 这
文件的构建信息 文件名 在一个目录中存储 .makepp/文件名。 如果
您删除此子目录或更改文件,makepp 将重建所有受影响的文件。

隐含的 装载
如果 makepp 尝试在目录中构建目标并且还没有针对它的规则,
或者,如果它正在目录中寻找与通配符匹配的文件,它将在该目录中查找
目录以查看是否存在 makefile。 如果是这样,makefile将被加载
自动。

这意味着您通常不必明确告诉 makepp 在哪里可以找到
makefiles--您所要做的就是引用另一个目录中的文件,makepp 将
自动找出如何构建它。

仅当目录对您可写时才会发生隐式加载。 因此,如果你想
防止 makepp 试图构建一堆永远不会改变的东西,只需让
目录只读。

如果您在树下的树中,则不会发生隐式加载 RootMakepp文件(.mk)
其他 makefile 位于该树之外。 如果你真的想要一次,你可以给一个
makepp 的“--do-build=/”选项,使树外的所有内容都可构建。 如果你
总是想要这个,你可以在树中的某处放置一个“load_makefile”语句来
明确地将它连接到树。

如果隐式加载妨碍了您(即,makepp 加载了太多的 makefile 并且浪费了
时间,否则你真的不希望它尝试重建所有在
makefiles),您可以使用“--noimplicit_load”命令为所有目录关闭它
行选项,或者您可以使用“no_implicit_load”为选定的目录关闭它
makefile 中的语句。

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


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




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