Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用CMake生成可再发行的项目_C++_Linux_Windows_Cmake - Fatal编程技术网

C++ 使用CMake生成可再发行的项目

C++ 使用CMake生成可再发行的项目,c++,linux,windows,cmake,C++,Linux,Windows,Cmake,我正在寻找使用CMake作为项目配置系统和gcc-4.8/VS2012,以及额外的第三方库(如Qt5),为Windows和Linux生成一个可再发行的项目。如何创建具有所有必需依赖项的包,并使项目在其他计算机上运行,而不在这些计算机上安装所需的包(即Qt5设置) 编辑 谷歌搜索大量我发现Qt5需要一些文件,我发现了这个讨论 这解释了所需的Qt5依赖关系 通常,我会列出所需的文件并进行打包。也就是说,假设我想创建一个包含以下组件的包: my\u nifty\u library.dll my\u

我正在寻找使用CMake作为项目配置系统和gcc-4.8/VS2012,以及额外的第三方库(如Qt5),为Windows和Linux生成一个可再发行的项目。如何创建具有所有必需依赖项的包,并使项目在其他计算机上运行,而不在这些计算机上安装所需的包(即Qt5设置)

编辑

谷歌搜索大量我发现Qt5需要一些文件,我发现了这个讨论

这解释了所需的Qt5依赖关系

通常,我会列出所需的文件并进行打包。也就是说,假设我想创建一个包含以下组件的包:

  • my\u nifty\u library.dll
  • my\u nifty\u executable.exe
  • QtCore.dll
  • QtGUI.dll
(免责声明:我不是Qt专家,所以最后两个文件可能根本不存在,但你知道了。)

鉴于
mynifty\u库
mynifty\u可执行文件
都是项目的一部分,您可以控制它们,因此只需执行以下操作:

install(TARGETS my_nifty_library my_nifty_executable
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib)
现在,由于Qt不会作为项目的一部分构建,我建议您使用该模块


现在,您可以使用
CPack
创建NSIS安装程序或
tar.gz

在windows上,我在CMakeLists.txt脚本中使用基于CMake的项目来实现这一点。我的意思是,我有一个脚本,它捆绑了正确的microsoft可再发行文件,还有一个cmake脚本,它收集每个依赖dll的列表。通过这个列表,我将这些组件添加到我的cpack设置中,以生成nsis安装程序。有了它,CMake就有了一个bundleutilities模块,可以为您完成一些任务,而无需编写脚本。因为我几年前就已经开发了我的脚本,所以我将它保持原样。@drescherjm:你能分享一下这个脚本吗?我会看看我能做些什么。脚本中包含一些未被很好描述的宏,因此我必须对此进行记录。@drescherjm:也许CMake的InstallRequiredSystemLibraries模块对microsoft redist有用?另请参阅@Andre和我的脚本,我已经能够提取microsoft redist:事实上,我的“安装”文件夹中有msvcp110.dll和msvcr110.dll。我试图解决的是可执行文件和最终打包的最终验证