![在 Linux 中编译 Unix 应用程序](https://linux22.com/image/151116/%E5%9C%A8%20Linux%20%E4%B8%AD%E7%BC%96%E8%AF%91%20Unix%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%20.png)
显然,Unix 和 Linux 的底层操作系统有相似之处。
是否有原因导致编译 Makefile 在 Linux 操作系统上无法编译,而在 FreeBSD 或 OSX 操作系统上无法编译?
例如,安装以下应用程序可以在 FreeBSD 操作系统上成功编译,但无法在 CentOS 或 Ubuntu 上编译。
http://www.superscript.com/trigger/install.html
Linux 操作系统中是否缺少需要构建此特定 Makefile 的库或内核头文件?
这是供参考的 Makefile: https://github.com/SuperScript/trigger/blob/master/src/Makefile
这是我尝试package\compile
在 Linux 机器上运行时得到的结果。
# package/compile
sh makefile.build default.build load load
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.build systype systype
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.build compile compile
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.o.build trigger-pull.o trigger-pull
makefile.build: line 30: .: default.o.build: file not found
答案1
查看了该软件包使用的各种独特的构建脚本后,它似乎是为 shell 编写的,/bin/sh
默认情况下允许.
命令(source
在 shell 中bash
)从当前目录读取和运行点脚本,即使脚本的路径未明确给出,并且当前目录不在 in $PATH
(或者开发人员假设您有.
in $PATH
,而您通常没有也不应该有)。
解决这个问题的方法是修补src/makefile.build
脚本,以便build_do
第 29 行的 shell函数读
build_do() {
( . ./"$build_it_cmds" "$1" "$2" "$3" > "$3" )
}
注意添加的./
.
然后您可能还应该向项目提交有关此问题的错误报告。幸运的是,使用 GitHub 可以非常容易地做到这一点,尽管我看到这个项目自 2012 年以来就没有进行任何开发,所以我不知道它是否已经死了。