为什么CMake中的RPATH_CHECK会删除可执行文件?
Why RPATH_CHECK in CMake deletes executable?
如果 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
Why RPATH_CHECK in CMake deletes executable?
因为它就是这样做的。 (?)
Is it correct behavior of CMake, or it is a bug?
正确。
What RPATH_CHECK should do?
检查文件是否有所需的 RPATH,如果没有,则应删除文件。
如果您对 CMake 中的 RPATH 功能有任何其他疑虑,我在最后一个答案中发布了源代码 - 一切都在那里。在 CMake 源代码树中搜索 RPATH_CHECK
,您会找到函数 - 从函数名称您可以“猜测”含义和使用的算法。
如果 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
Why RPATH_CHECK in CMake deletes executable?
因为它就是这样做的。 (?)
Is it correct behavior of CMake, or it is a bug?
正确。
What RPATH_CHECK should do?
检查文件是否有所需的 RPATH,如果没有,则应删除文件。
如果您对 CMake 中的 RPATH 功能有任何其他疑虑,我在最后一个答案中发布了源代码 - 一切都在那里。在 CMake 源代码树中搜索 RPATH_CHECK
,您会找到函数 - 从函数名称您可以“猜测”含义和使用的算法。