【发布时间】:2019-01-04 11:14:17
【问题描述】:
我有以下简单的 CMake 项目。它基本上是一个动态链接到 Qt Widgets 的可执行文件(我以 Qt 为例)。我想弄清楚的是是否可以使用 CMake 将所有链接库(不仅是当前项目构建的库)复制到可执行输出目录。
cmake_minimum_required(VERSION 3.12)
project(MyProject)
set(CMAKE_CXX_STANDARD 14)
set(QT_CMAKE_DIR "/Users/huser/Qt/5.11.1/clang_64/lib/cmake")
set(CMAKE_PREFIX_PATH ${CMAKE_MODULE_PATH} ${QT_CMAKE_DIR})
find_package(Qt5 REQUIRED COMPONENTS Widgets)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Widgets)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR}/build)
问题在于输出目录仅包含 MyProject 可执行文件(这是预期的行为)。但是,如果我将该可执行文件分发给没有安装 Qt 的人,他们将无法打开它。因此,我只想将必要的库/框架与可执行文件捆绑在一起。
运行otool -L MyProject 列出依赖项:
MyProject:
@rpath/QtWidgets.framework/Versions/5/QtWidgets
@rpath/QtGui.framework/Versions/5/QtGui
@rpath/QtCore.framework/Versions/5/QtCore
/usr/lib/libc++.1.dylib
/usr/lib/libSystem.B.dylib
我正在寻找的是一种通过 CMake 将这 3 个框架在构建步骤之后立即复制到输出目录中的常用方法。这将导致以下目录结构:
build/
MyProject
QtWidgets.framework
QtGui.framework
QtCore.framework
任何帮助将不胜感激!
【问题讨论】:
-
看来BundleUtilities模块就是你要找的。span>
标签: c++ macos cmake shared-libraries dynamic-linking