最近,我发现Ubuntu中的latex和pdftex (和其他二进制文件)是相同的:
lrwxrwxrwx 1 root root 6 лип 29 18:03 latex -> pdftex*
lrwxrwxrwx 1 root root 6 лип 29 18:03 pdflatex -> pdftex*
lrwxrwxrwx 1 root root 6 лип 17 20:22 pdfcslatex -> pdftex*在没有任何选项的情况下执行all会产生不同的结果;因此,我假设它们使用argv[0]。
使用argv[0]而不是编译多个二进制文件有什么好处?argv[0]还有哪些其他用途?
发布于 2014-10-30 10:45:19
当有大量的共享功能时,它会导致更小的总体可执行文件大小。这是箱箱极端的做法,它拥有数百个大小优化的命令,它们都链接到同一个二进制文件中,并通过argv0进行区分。
据我所知,只有另外两种有用的使用方法:
发布于 2014-10-30 10:44:57
基本上是为了节省整体的精力。发送几个微妙不同的二进制文件是在浪费磁盘空间、构建工作(每个版本需要更多的编译)、管理工作(需要维护更多的构建目标和更多的项目)等等。这些二进制文件之间的不同之处是相对简单的条件,最终可能会通过编译器指令自动生成同一源文件;因此,通过正确的if结构(而不是摇摇欲坠的预处理器命令)来动态地使用-语言进行区分就更容易了。
发布于 2014-10-30 10:54:35
如果在命令中重用了大量代码,比如解析一个文件并转换成另一种格式,那么这将防止大部分重复的可执行文件。您也可以使用uber命令和参数来完成这一任务。
这确实有一个缺点,即它依赖于可执行文件的调用方式,一个天真的人可能会复制该可执行文件并重命名它,从而阻止它按预期的方式工作。
https://softwareengineering.stackexchange.com/questions/261338
复制相似问题