我已经在其他帖子中搜索了此问题,但到目前为止没有任何内容。所以我在这里。
我想创建一个可移植的捆绑包。可移植,如“即使未安装所需的库(Qt),我也可以在任何OS X机器上运行它”。不幸的是,我无法弄清楚如何使用fixup_bundle()(似乎是正确的工具)实现这一目标。
这是我最小的CMake生成的C ++项目:
main.cpp
#include <QString>
#include <iostream>
int main()
{
QString s("Hello, world!");
std::cout << s.toStdString() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)
project(test)
# That part because I use a custom build of Qt. That's not the
# relevant part (I guess?)
FILE(GLOB QTROOTS path_to_qt/Qt-4.8.1/osx/bin/qmake)
find_program(QT_QMAKE_EXECUTABLE NAMES qmake PATHS ${QTROOTS})
find_package(Qt4 COMPONENTS QtCore REQUIRED)
include(${QT_USE_FILE})
add_executable(test MACOSX_BUNDLE main.cpp)
target_link_libraries(test ${QT_LIBRARIES})
install(SCRIPT bundle.cmake)
Run Code Online (Sandbox Code Playgroud)
bundle.cmake
INCLUDE(BundleUtilities)
fixup_bundle(test.app "" "")
Run Code Online (Sandbox Code Playgroud)
这是生成的test.app结构
test.app
- Contents
- Info.plist
- Frameworks …Run Code Online (Sandbox Code Playgroud) 我正在使用CMake构建Qt应用程序。我的项目可以编译,并且要感谢'fixup_bundle()',make install将所需的库复制到我的可执行文件旁边。大!
唯一的问题是,当我执行它时,我得到的恐惧是“此应用程序无法启动,因为它无法找到或加载Qt平台插件“ windows”。错误。
实际上,手动将qwindows.dll复制到可执行文件旁边的“ platforms”目录中可以解决此问题。现在,如何告诉CMake自动执行此操作?
Qt没有太多信息:
插件也可用作CMake中的导入目标。Qt Network,Qt SQL,Qt GUI和Qt Widgets模块具有关联的插件。它们在Qt5_PLUGINS变量中提供了插件列表。
好吧,我想我必须使用Qt5 :: QWindowsIntegrationPlugin,它应该是导入的目标。那就是我迷路的地方。
我知道(好吧,至少我至少知道),fixup_bundle()会查看可执行文件以查找其依赖项。但是,尽管事实是我将可执行文件链接到QWindowsIntegrationPlugin,但没有任何痕迹。因此,fixup_bundle()不会将qwindows.dll复制到我的输出路径中。
除了文件的手动副本外,我找不到适合该问题的CMake友好答案。
谢谢你的帮助。