英语法语西班牙语

Ad


OnWorks 网站图标

makepp - 云端在线

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

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

程序:

您的姓名


makepp -- 兼容但改进的 make 替代品

概要


制造商 [-e][-C DIR ] [ -F 生成文件] [ -F 生成文件或目录 ]
[-j n] [-k] [-m 方法 ] [ --noremake-makefiles ]
[ --nowarn ] [ -q ] [ -R DIR] [ --传统递归制作 ]
[-v] [--版本] [ VAR=值 ...] [ 目标 ...]

[-选项] [ VAR=值 ...] [ 目标 ...]

商品描述


Makepp,一个构建程序,它具有许多允许可靠构建和
更简单的构建文件,是 GNU make 的直接替代品。 它支持几乎所有的
GNU make 支持的语法,可以与实用程序生成的 makefile 一起使用,例如
作为汽车制造商。 它被称为 makepp(或 制作++) 因为它是在特殊支持下设计的
用于 C++,此后已扩展到其他语言,如 Swig 或嵌入式 SQL。 还
它的关系 使 类似于 C++ 与 C 的关系:几乎是 100%
向后兼容,但添加了许多新功能和更好的编写方式
生成文件。

Makepp 通过了广泛的测试套件,并用于多个大型项目。 如果你有
最新的 CVS 版本有任何问题,大喊大叫,我们会尽快修复它。 马克普
自 5.8 以来,可与任何版本的 Perl 一起运行。

以下手册页包含有关如何使用 makepp 的更多信息:

教程
如何编写makefile。 这主要是针对那些很少或没有的人
使用任何 make 实现的经验。

编译教程
Unix 编译命令的作用。

发布说明
每个版本都有什么变化。

不兼容性
GNU make 和 makepp 之间的工作方式有何不同。

提速
使 makepp 运行得更快的各种技巧。

Perl 性能
使 Perl 编程(在你的 makefile 和其他地方)运行的各种技巧
更快。

菜谱
快速回答“我如何......?” 或“最好的方法是……?”

常见问题解答 对人们偶然发现的问题的快速解答。

构建算法
makepp 的构建算法在基本方面与传统 make 有何不同。

构建缓存
构建缓存是一个目录,用于存储先前构建的结果,以防它们
在同一目录中再次需要,或在不同目录中的单独构建中。

构建检查方法
makepp 如何决定何时构建。

内置命令
在 makepp 2.0 或更新版本的任何地方都可以使用强大、高效的命令。

内置规则
对于非常简单的程序,您可能根本不需要生成文件! 这些是内置的
makepp 知道的规则。

兼容性
在哪里以及使用什么版本的 Perl makepp 工作。

扩展
如何通过编写自己的 Perl 代码向 makepp 添加函数。

主要工作内容
用于文本操作和各种其他目的的函数。


存储库是一种简化变体构建并保持中心化的技术
源集。

规则
指定构建文件的规则。

沙箱
使用沙箱对构建进行分区。

扫描
makepp 如何扫描包含文件等依赖项。

签名
makepp 如何决定文件何时更改。

声明
控制 makepp 的附加指令。

变量
使用变量来简化规则。

制造商,制造商
主实用程序的命令行语法。

makeppclean,mppc
一个高效的独立清理脚本,用于删除由 makepp 生成的文件。

makeppgraph, mppp
一个独立的实用程序,用于以图形方式分析依赖关系和原因
重建。

makeppinfo,mppi
一个独立的实用程序,用于可读地转储 makepp 记住的每个构建信息
文件中。

makepplog,mppl
用于分析依赖关系和重建原因的独立实用程序。

makeppreplay,mppr
一个独立的实用程序,用于重复 makepp 所做的事情,但速度要快得多。

Index
makepp 中的所有关键字、函数和运算符。

特征
自动扫描包含文件
Makepp 会自动扫描包含文件。 这消除了对工具的需要,如
依赖。 即使包含的文件不存在,Makepp 的扫描程序也能工作,但是
必须建造。 (无论它们来自包含路径的哪个位置,都是如此,
与依赖 gcc 的“-MM -MG”选项的程序不同。)Makepp 有一个灵活的系统
这样做是基于扫描构建命令; 你可以适应它
其他语言或通过编写 Perl 子程序构建命令。

更好的分层构建系统
Makepp 有一个更好的系统来处理涉及多个目录和
多个makefile。 传统的技术是使调用自身
在每个目录中递归。 取决于相互依赖的复杂程度
是,有时需要多次递归传递。 这使得 makefile 非常
如果他们保证正确的构建,则复杂。 真正的问题是,除非
依赖项是微不足道的(例如,只有一个库文件),几乎不可能
在一个 makefile 中根据目标准确表达目标的依赖关系
另一个生成文件。 Unix make 不够聪明,无法实现一个目标
makefile 依赖于作为低级 makefile 目标的文件; 它不能
在尝试构建目标时从较低级别的 makefile 构建命令
上层生成文件。 所以通常的解决方案是构建所有可以
使用较低级别的 makefile 构建,希望这足以构建所有内容
这是上层 makefile 所需要的。

Makepp一次加载所有需要的makefile,所以处理起来没有问题
来自一个 makefile 的文件依赖于由另一个生成的文件的情况
生成文件。 Makepp cd 会自动跳转到之前包含 makefile 的目录
从 makefile 执行命令,因此每个 makefile 都可以独立编写
不知道顶级构建目录。 但是如果访问你的根目录
构建树很重要(例如,因为那是您的包含目录所在的位置),
您可以专门命名该目录中的makefile。 然后makepp给你路径
到变量中的那个目录。

Makepp 还可以找出整个项目的所有 makefile 没有
被告知,如果每个 makefile 与它应该位于的文件位于同一目录中
生产。 这也可以大大简化makefile。

有关使用多个目录构建的更多详细信息,请参阅“多个目录的提示”
目录”在 makepp_cookbook 中。

可靠的通配符
Makefile 可以可靠地使用通配符,因为通配符匹配
存在, or 尚不存在但 makepp 知道如何构建的文件。 所以即使对于一个
具有数十个模块的程序,您的整个 makefile 可以简单地读取类似
这个:

CXX = g++
CXXFLAGS = -g

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

我的程序:*.o
$(CXX) $(输入) -o $(输出)

即使尚未构建任何“.o”文件,这也将起作用。

可靠的构建:记住构建命令
Makepp 会跟踪构建命令,因此如果编译选项发生变化,文件
会自动重建。 这对于保证正确构建很重要。 (这个想法
取自 Bob Sidebothem 的“缺点”实用程序,它在 Perl 中进行了描述
1998 年的期刊,可从 CPAN 获得。)

为了说明为什么这很重要,请考虑以下结构定义:

ABC类{
int x;
#ifndef 特殊选项
输入 y;
#ENDIF
内部 z;
};

现在假设您决定通过添加来打开“SPECIAL_OPTION”选项
“-DSPECIAL_OPTION”到命令行。 一切都需要重新编译,但是
传统的 Unix make 不会检测到这一点,只会重新编译源文件
实际上已经改变了。 因此,您的某些模块将被编译为
-DSPECIAL_OPTION,其他人则不会。 在一个非常令人沮丧的调试会话之后,你
会发现所有需要做的就是重建一切。 然后你会
诅咒 make 并希望切换到它的改进实现,例如 makepp。 在
至少,这就是我所做的。

再举一个例子,假设你正在做一个非常好的项目
已调试,因此通常使用“-O2”进行编译。 现在你遇到了一个你需要的错误
在调试器中查看。 优化编译的代码很难检查
在调试器中,所以你想重新编译你的代码以便你可以查看它。 如果
您的 makefile 设置为将编译器选项存储在常用变量中,您可以
只需这样做:

makepp CFLAGS=-g CXXFLAGS=-g

makepp 将知道所有模块的命令行都已更改。 那么当
你已经找到了你的错误,只需输入

制造商

它将通过优化重新编译。 当你不需要输入“make clean”时
您更改构建选项。

一些 makefile(例如,用于 Linux 内核的)花费了令人难以置信的长度来强制
当编译命令改变时重新编译。 使用 makepp,它已经解决了
自动——您无需执行任何操作。

可靠的构建:签名的精确匹配
默认情况下,makepp 不仅仅确保所有目标都比所有目标都新
依赖; 如果用旧文件替换依赖项,makepp 知道它有
重建目标,仅仅因为输入文件已更改。 这是另一个
确保正确构建的重要功能,该功能取自“cons”实用程序。

智能签名计算
对源文件的某些修改实际上不需要重建。 例如,如果
你只是改变一个注释行,或者如果你重新缩进一些代码,没有特别的
强制编译的原因。 对于 C/C++ 编译,makepp 确定是否
文件需要通过计算文件内容的加密校验和来重新编译,
忽略注释和空格,而不是查看文件时间。

如果包含由以下文件生成的文件,这将特别有用
更改,但生成的包含文件本身很少更改。 假设你
在您的程序中有一个复杂的 yacc 语法,其构建规则如下:

y.tab.c y.tab.h:解析器.y
yacc -d 解析器.y

通常,每次对“parser.y”进行微小的更改时,
由于“y.tab.h”的文件时间已更改,因此必须重建依赖于“y.tab.h”。
但是,对“parser.y”的大多数更改实际上不会更改“y.tab.h”的内容
(除了可能的评论),所以所有的重新编译都是不必要的。


Makepp 可以自动合并来自不同目录树(
“repository”)根据需要添加到当前构建树中。 (这个想法也取自
“缺点”程序。)这有几个有趣的用途:

变体构建
假设你一直在编译你的程序,优化和调试
离开。 现在出现了一个错误,您必须通过调试重新编译所有内容
启用。 然而,一旦你发现了错误,你就会关闭调试并
重新优化,对于大多数 make 程序,您必须重新编译所有程序
来源再次,即使是那些没有改变的。 程序看起来
喜欢这个:

% makepp CFLAGS=-O2 # 编译一切。
# 哎呀,这里发现了错误
% makepp CFLAGS=-g # 重新编译一切。
gdb 我的程序
# ...找到错误
% makepp CFLAGS=-O2 # 第三次重新编译所有东西。

使用 makepp,您可以简单地 cd 到一个空目录,并指定您的原始目录
目录作为存储库。 这将在空文件中创建新的目标文件
目录,同时保持旧的目标文件完好无损。 现在你可以找到错误
在debug编译的目录下,在你原来的源码中修复,然后去
回到你原来的目录。 现在只有您实际更改的几个文件
需要重新编译。

整个过程如下所示:

% makepp CFLAGS=-O2 # 编译一切。
# 哎呀,这里发现了错误
% mkdir 调试
% cd 调试
% makepp -R .. CFLAGS=-g # 编译时启用调试,但是
# 将对象放在调试子目录中。
% gdb 我的程序
# ...找到错误
% cd .. # 回到原来的目录。
% makepp CFLAGS=-O2 # 只重新编译那些文件
#你改变了。

如果有很多模块,这可以节省大量时间。

具有共同来源的开发团队
假设您有一个开发人员团队处理一组标准的源代码。 每个
开发人员正在进行独立的更改,但不需要拥有
整个源树。 使用 makepp 的存储库,您可以让每个开发人员拥有
仅复制他已更改的文件。 Makepp 将自动和
为其他未更改的文件临时创建符号链接
到存储库中的相应文件。 它甚至可以为对象做到这一点
存在于存储库中且不需要在存储库中重新编译的文件
开发人员的个人目录。

保证正确的规则
如果你的规则做了一些你没有告诉 makepp 的事情,存储库
机制将不知道获取那些东西。 所以一些正常构建的东西
但来自存储库的失败告诉您修复规则。

自动推断所需的“.o”文件
Makepp 通常可以准确地推断出哪些对象实际上是必要的,而不是
明确告诉。 如果您使用此功能,那么如果您的源文件之一包含
“xx.h”,还有一个叫“xx.o”的文件,makepp知道怎么做,然后makepp
将“xx.o”添加到链接命令行。 我现在不使用非共享库
以前常去的地方,因为makepp可以自动挑出我需要的模块。

正确处理目录别名
Makepp 不会被一个目录的软链接或不同的相对
引用同一文件的文件名。 识别文件的所有目录路径,
如: FOO, ./富, ../src/foo, /auto_mnt/somedisk/bob/src/foo
/用户/鲍勃/src/foo.

带有特殊字符的文件名
Makepp 可以支持带有冒号或空格或其他特殊字符的文件名
给传统制造带来麻烦。 只需用引号将文件名括起来。 (看
makepp_rules 中的“特殊字符”了解详情。)

可扩展的文本替换功能
Makepp 可以使用任意 Perl 子例程在 makefile 中进行文本替换。
如果你了解 Perl,你就不会受到 makepp 的内置命令集的限制
文本操作功能。

您也可以在 makefile 中简单地编写 Perl 代码。 您可以操作 Make
变量具有整个 Perl 语言的全部功能。 参见 makepp_variables
细节。

记录构建决策
默认情况下,makepp 使用 makepplog、mppl 使日志文件可查看,其中包含
它尝试构建的每个文件的描述,使用什么规则构建它,什么
这取决于,以及(如果文件被重建)为什么。 这对于以下情况非常有用
调试 makefile——如果你想知道为什么 makepp 决定重建一个文件,或者为什么
它没有,您可以查看解释决策的日志文件。

改进了对并行构建的支持
Makepp 支持并行编译,但(与其他 make 实现不同)它
不会混合来自同时运行的不同进程的输出。

神秘变量的同义词
Makepp 为神秘的 make 变量 $@、$^ 和
$<. 有关详细信息,请参阅 makepp_variables。

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


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    AstrOrz播放器
    AstrOrz播放器
    AstrOrz Player 是一款免费的媒体播放器
    软件,部分基于 WMP 和 VLC。 这
    播放器采用极简风格,带有
    十多个主题色,还可以
    B ...
    下载 AstrOrzPlayer
  • 2
    电影启动器
    电影启动器
    Kodi Movistar+ TV 是 XBMC/ 的 ADDON
    Kodi 许可分配器
    IPTV服务解码器
    Movistar Integrado en uno de los
    媒体中心马...
    下载 movistartv
  • 3
    代码::块
    代码::块
    Code::Blocks 是一个免费的、开源的、
    跨平台 C、C++ 和 Fortran IDE
    专为满足最苛刻的需求而打造
    它的用户。 它的设计非常
    扩展...
    下载代码::Blocks
  • 4
    之中
    之中
    中间或高级 Minecraft 界面
    和数据/结构跟踪是一种工具
    显示 Minecraft 的概览
    世界,而无需实际创造它。 它
    能够 ...
    下载烟雨
  • 5
    系统2
    系统2
    MSYS2 是一组工具和
    图书馆为您提供
    易于使用的建筑环境,
    安装和运行本机 Windows
    软件。 它连...
    下载 MSYS2
  • 6
    libjpeg-turbo
    libjpeg-turbo
    libjpeg-turbo 是一个 JPEG 图像编解码器
    使用 SIMD 指令(MMX、SSE2、
    NEON、AltiVec)加速基线
    JPEG 压缩和解压
    x86、x8...
    下载 libjpeg-turbo
  • 更多 ”

Linux 命令

Ad