![MacPorts:如何重建特定端口?](https://linux22.com/image/1325253/MacPorts%EF%BC%9A%E5%A6%82%E4%BD%95%E9%87%8D%E5%BB%BA%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
如何强制 MacPorts 重建特定端口?我手动更改了 MacPorts makefile 以链接到特定库,但仍然找不到丢失的符号。也许我需要重建,但如何在不清除端口(这会删除我修改的文件)的情况下完成此操作?
动机
我尝试使用 MacPortsqt4-mac-devel
在 Mac OS X Mountain Lion 中安装 Qt(即端口),但安装失败,并出现未定义符号 ( _objc_msgSend_fixup
)。MacPorts 票遇到类似问题后,我检查了QtWebKit.pro
以下有问题的文件:
QT4_SRC=/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_aqua_qt4-mac-devel/qt4-mac-devel/work/qt-everywhere-opensource-src-4.8.0/src/3rdparty/webkit/Source/WebKit/qt/
254 行的谓词else
检查 Darwin 11 或 10.7 SDK(两者都在 Lion 中,在 Mountain Lion 中不可用)。列表中没有if-else
针对 Mountain Lion 的 WebKit 的谓词。
254: } else: equals(DARWIN_MAJOR_VERSION, "11") | contains(QMAKE_MAC_SDK, "/Developer/SDKs/MacOSX10.7.sdk") {
255: LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLion.a
256: }
257:}
作为一个肮脏的快速修复,我将第 254 行改为无条件else
。当我尝试通过重新运行命令来测试这一点时port install
,我看到了相同的原始错误。我很确定 MacPorts 甚至没有看到我的更改,因为我在文件中输入了垃圾文本并重命名文件后重新运行了命令。所以,我现在正在寻找一种强制重建的方法。
我尝试过的事情
- 重建
-s
标志(从源重建):sudo port install -s qt4-mac-devel
- 触摸所有 Qt 源文件后重建:
find ${QT4_SRC} -name "*.cpp" -exec touch {} \;
- 清理端口然后重建(不行...
port clean
删除QtWebKit.pro
包含我需要的更改的文件)
有什么建议吗?谢谢。
答案1
我建议为 qt4-mac-devel 创建一个本地端口文件,并将您的更改添加为在构建过程中应用的补丁。
- 创建本地端口文件存储库:如何
- 将 qt4-mac-devel 端口文件目录(名为“qt4-mac-devel”的目录(路径“/opt/local/var/macports/sources/rsync.macports.org/release/ports/aqua/qt4-mac-devel/”)包含文件“Portfile”和目录“files”)复制到本地端口文件存储库
- 使用您对 qt4-mac-devel 源代码的更改创建一个补丁,并将其添加到“文件”目录。
- 编辑本地 qt4-mac-devel Portfile 以包含以下行
patchfiles yourpatch.diff
portindex
在本地 portfile 存储库中再次运行- 使用以下命令安装 qt4-mac-devel
port install -s qt4-mac-devel
我希望这能有所帮助。