C ++ / Qt分发中的库链接

时间:2015-11-18 16:23:11

标签: c++ qt dll cmake static-libraries

我正在用C ++ 11开发一个项目,并不是distrubition,编译,打包等最大的专家。我用

  • CMake 3.1.0
  • Qt 5.4(社区版)

此外,我希望该程序可以在OS X和Windows上运行。因此,我的IDE包括:

  • Apple Xcode 7
  • Microsoft Visual Studio 2013

我遇到了Windows版本的麻烦。截至目前,我无法将可执行文件复制到另一台计算机,因为不包含DLL文件。如果我复制了我收到错误的所有DLL文件,它只是说该程序无法运行。我已经阅读了一些关于静态库链接的内容,但我不确定这是否是我需要的。

我的CMakeLists.txt看起来像这样:

set(libsources file1.cpp file2.cpp)
set(exec1sources file3.cpp file4.cpp)
set(exec2sources file5.cpp file6.cpp)

# some qt commands

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ..)
add_library(sharedlib ${libsources])
generate_export_header(sharedlib)
add_executable(exec1 ${exec1sources})
add_executable(exec2 ${exec2sources})

target_link_libraries(sharedlib Qt5::A Qt5::B)
target_link_libraries(exec1 Qt5::A Qt5::B sharedlib)
target_link_libraries(exec2 Qt5::A Qt5::C sharedlib)

install(TARGETS exec1 RUNTIME DESTINATION bin)
install(TARGETS exec2 RUNTIME DESTINATION bin)

正如您可能看到的,我想要2个可执行文件,每个可执行文件都使用共享库中的某些功能。我希望他们独立工作。

我可能不是世界上第一个遇到此问题的人,但我无法在StackOverflow上找到类似的线程。

1 个答案:

答案 0 :(得分:2)

你试过windeployqt吗?它将自动复制您的应用程序的所有依赖项。您可以在Qt-Kit

的bin文件夹中找到它

对于Mac,有一个类似的工具,名为macdeployqt