【发布时间】:2021-12-21 03:50:40
【问题描述】:
如果 RPATH 不同,以下 CMake 的操作将删除可执行文件。
file(RPATH_CHECK
FILE "${CMAKE_CURRENT_SOURCE_DIR}/moc"
RPATH "\$ORIGIN/../lib")
如果 RPATH 不是 $ORIGIN/../lib,则 - 操作,并且不再有可执行文件。
这是 CMake 的正确行为,还是一个错误?
RPATH_CHECK 应该做什么?
我在 Linux 上的 Qt 6.2.1 中发现了这个问题。 Qt 构建成功,但 cmake --install . 失败,因为 CMake 删除了可执行文件,原因是 RPATH_CHECK 文件的操作与 RPATH 不匹配(声明的和实际的)。实际 RPATH 是 :::::::::::::: 在执行点 RPATH_CHECK。
我在 Kubuntu 20.04 上。我使用官方在线安装程序安装了 Qt 的源代码。要配置我使用的 Qt:
./configure -nomake tests -nomake examples -skip qttest -skip qtwebengine -skip qtwebview -skip qtpositioning -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtnfc -skip qtcharts -skip qt3d -skip qtwayland -skip qtcoap -skip qtdatavis3d -skip qtlottie -skip qtmqtt -skip qtnetworkauth -skip qtopcua -skip qtquick3d -skip qtquicktimeline -skip qtremoteobjects -skip qtvirtualkeyboard -skip qtwebchannel -skip qtwebsockets -release -shared -skip qt5compat -skip qtdoc -skip qtscxml -skip qttranslations -skip qttools
然后
cmake --build . --parallel
CMake 版本 3.16.3
【问题讨论】:
-
我找不到您最近关于非常相似的问题的问题,您似乎已将其删除。请注意,当您找到有关问题帖子中描述的问题的更多信息时,在 Stack Overflow 首选方法是编辑问题帖子,而不是删除现有问题帖子并创建一个新的。
-
RPATH_CHECK是内部 CMake 功能。它没有在文档中描述,并且不打算在任何代码中使用,除了由 CMake 自己生成的代码。询问内部功能可以做什么有点道理:只有 CMake 开发人员可以回答,而且他们不太可能希望回答,因为他们不会在外部代码中使用内部功能。相反,请询问您的 CMake 项目的具体问题。据我记得,您之前的问题更多是关于具体项目的。 -
@Tsyvarev 当然,但是这个问题非常空间,有很多错觉,没有人评论或回答,所以我决定创建一个明确的问题。很抱歉给您带来不便。
-
@Tsyvarev 我知道
RPATH_CHECK是内部功能,但 CMake 会生成自己的安装脚本,并失败。我调查了RPATH不匹配的问题,并试图了解这个问题:CMake的或Qt的项目。 -
“只是想了解这个问题:CMake 的或 Qt 的项目” - 像往常一样:假设错误出现在您的项目中。除非你能展示项目,每个人都能发现项目是正确的。