问题标签 [cpack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2862 浏览

cmake - CPack NSIS,为 Windows 生成安装程序

我正在尝试在 VS 项目中运行数据包生成器,它在编译时崩溃,因为在从目标和文件安装时使用了绝对路径。

我检查了两次,所有安装目录都是相对的。我将很多变量设置为 ${PROJECT_BINARY_DIR} 的子文件夹(应该是相对的),例如:

CMAKE/CPACK 是否将这些变量解释为绝对路径?如果是这样,有没有办法让 CPack 与这些变量一起正常工作?涉及子相对路径时如何使用 CPack?

谢谢

0 投票
1 回答
3438 浏览

cmake - CPack:如何使用导出来创建库包?缺少 *Targets-noconfig.cmake 文件

更新

看起来它是 Windows cpack 版本的错误 - 在 Linux(Ubuntu)下,cpack 命令丢失了文件。当我有更多时间时,我会做更多的研究并发布结果。


注意:我完全改变了这个问题,因为我能够简化它并创建新的、更短的示例。核心问题,但是丝毫没有改变。

问题描述

我有一个库项目,我们称之为 Foo,我使用cpack命令打包它。这个包包含FooConfig.cmakeFooTargets.cmake文件(由cmake机制导出的第二个)。问题是,这还不足以让 cmake 使用它。find_package()找到它,但与 链接时fooNo rule to make target foo-NOTFOUND', needed by bar.exe'. Stop.出现错误。

但如果我make install DESTDIR=./out_dirFooTargets-noconfig.cmake. 该文件包含 foo 库文件的路径。

那么,我需要做些什么来解决这个问题?是否有描述这种行为的文档?

奖励问题:我看到该*-noconfig*文件包含库的路径,但不包含标题目录。有没有办法配置库项目,所以这个生成的文件也会自动包含它?

更多信息,注释:

  • 我的操作系统:Windows 7、64 位。
  • 编译器:MinGW 4.4.0(32 位)。(注意:是的,而不是make我使用mingw32-make命令。)
  • CMake 版本:cmake 2.8.12.2。
  • 我尝试使用结果make install并且No rule to make target xyz-NOTFOUND', needed by Index.exe'. Stop.错误消失了,所有编译和结果 exe 都按预期工作。看起来 noconfig 文件就是所需要的。

工作流程/重现步骤:

  • 创建代码后(见下文):
  • cmake-gui创建构建目录(库项目)(配置,然后生成)
  • mingw32-make在构建目录中
  • 变体a)mingw32-make install DESTDIR=./out_dir安装库
  • 变体 b)cpack -C CpackConfig.cmake -G ZIP与库一起获取包
  • 使用上一步中的文件并将其移动到CMAKE_PREFIX_PATH环境变量中的特殊目录,以便 cmake 可以找到它(注意“移动”,而不是“复制”,因此删除了原始文件)。
  • cmake-gui对于可执行项目(同样,配置,然后生成)
  • mingw32-make在构建目录中

最后一步对于变体 a) 和 b) 是不同的。对于 a),构建完成和可执行文件正常工作,正如预期的那样。在 b) 的情况下,将No rule to make target xyz-NOTFOUND', needed by Index.exe'. Stop.出现错误且没有更多信息。

我的示例代码:

Foo/CMakeLists.txt:

富/富.cpp:

富/富.h:

Foo/FooConfig.cmake :

酒吧/CMakeLists.txt:

酒吧/酒吧.cpp

一些生成的文件:

如果您感兴趣,生成的文件很少:

lib/foo/FooTargets-noconfig.cmake

lib/foo/FooTargets.cmake

0 投票
1 回答
357 浏览

macos - 通过 Open 运行 OSX Bundle

我正在尝试在涉及 OpenCV 和 Qt 的 OSX 上使用 CMake/CPack 制作 OSX 包(尽管我认为此时这些依赖关系并不重要)。一切都可以编译并且包创建得很好,我有一个脚本可以修改必要的库路径,如果我从包中的终端运行它,我正在制作的可执行文件就可以工作。我遇到的问题是,如果我尝试通过 open 命令运行 MyApp.app 文件,或者只是双击应用程序,它会给我错误:

我已经看到其他涉及修改权限的 LSOpenURLsWithRole() 错误的其他解决方案,但这对我没有帮助。此外,此错误代码是“未知错误”,因此我不确定如何继续。

0 投票
1 回答
1135 浏览

cmake - CMake:在使用 cpack 创建的 deb 包中保留文件权限?

我用 cpack 创建了一个 deb 包,但它没有保留目标机器上的原始权限。这导致我的应用程序的用户在安装后无法执行它。

0 投票
1 回答
3927 浏览

cmake - cpack 生成带有 %files 条目的 RPM,这些条目与 RPM 规范冲突。怎么修?

最近,我需要确保我们的软件可以打包使用cpackRHEL 7 及其免费重建(例如 CentOS 7)。尽管如此,我一直遇到 RHEL 6.x 及其免费重建不存在的问题:cpack生成所有的 RPM 在其%files部分系统目录条目中具有如下所示:

不应由包声明。

AFAIK,这个要求多年来一直在 RPM 规范中,但只有在最新版本的 RPM(即比 4.8.0 更新)中才被强制执行。由于 RHEL 7 与 RPM 4.11.1 捆绑在一起,因此现在生成的内容与以下错误cpack发生冲突:filesystem-3.2-18.el7.x86_64yum install ...

我尝试使用一个cmake包含以下内容的小模块:

并将其包含在CMakeLists.txt's之前include(CPack)。但是生成的 RPM 仍然包含这些系统目录 :(

作为一种临时解决方法,我一直在使用文件冲突中给出的提示来安装带有 "Filesystem" 的包,即使用该rpmrebuild实用程序删除该部分中的这些系统目录条目%files。显然,这根本不是解决办法。

有人找到更好的方法吗?

0 投票
2 回答
2945 浏览

cmake - 安装 CMake 组件时如何获取将要安装的文件列表

有没有办法以编程方式(在 CMake 中)知道如果COMPONENT安装了 a (类似于get_property组件)将安装哪些文件?

目前,我正在安装一个COMPONENT临时位置进行打包(不使用CPack进行打包),然后使用自定义命令进行打包。我在 CMake 打包期间调用以下命令。

我想知道是否可以获得文件列表,以便我只能在包中明确包含这些文件?或者可能将它们作为输出添加到自定义命令?

0 投票
0 回答
982 浏览

cmake - CPack 使用来自不同源代码树的可执行文件创建包

问题如下:

项目结构:

我想要实现的是:

  • 带有SomeTool二进制文件的包(让它成为rpmdeb) ;
  • 包含FirstAppSecondAppSomeOtherTool二进制文件;

我所知道的:

  • CPack 将安装命令中定义的内容放入包内容中;
  • CPack 不能include(CPack)在同一棵树中被调用 ( ) 两次(例如,它不能在 CMakeLists.txtsrc级别 ANDSecondApp级别调用);

我有什么

ProjectDir/tools/SomeTool/CMakeLists.txt我(这是伪代码)中:

这样我就可以调用它,它会创建带有 content的make SomeTool-packagepackage ( ) 。伟大的!SomeTool.rpm/usr/bin/SomeTool


我可以CMakeLists.txtProjectDir/src/目录中有非常相似的:

这样我可以调用make MainProject-package,它会创建MainProject.rpm包含内容的包 ()/usr/bin/FirstApp/usr/bin/SecondApp. 伟大的!

SomeOtherTool也有一个CMakeLists.txt看起来与FirstAppSecondApp CMakeLists.txt相同的东西,我可以调用make SomeOtherTool它,它会生成SomeOtherTool二进制文件。

问题

由于 CPack 正在将连接到install命令的东西放入包中,我如何将SomeOtherTool与我的MainProject-package连接?

我的解决方案是(是)install在末尾添加另一个子句,src/CMakeLists.txt如下所示:

还有其他方法吗?这个解决方案看起来不干净。如果我更改SomeOtherTool可执行文件名称,我也必须在这里更改它。安装路径也是如此。

0 投票
1 回答
1883 浏览

installation - 向 cpack 添加额外的命令 - NSIS 打包程序/安装程序

我想使用已经存在的文件使用 CPack 和 NSIS 为 windows 打包我的项目, 我想在其中添加一个额外的GeneratorConfig.cmake命令,该命令将复制一个.ini名为.myProject.ini%APPDATA%/myProject/myProject.ini

这是 GeneratorConfig.cmake

我尝试使用下面的代码来执行此操作,但这会构建包但不会复制到myProject.ini任何地方。

任何帮助或建议将不胜感激。

0 投票
2 回答
894 浏览

rpm-spec - 在 CPack 中将文件标记为配置文件

创建 RPM 包时:如何告诉 CPack 将文件视为配置文件,以便在更新 RPM 时不会被覆盖?

在这种情况下, rpm-spec 中使用了%config指令。CPack中有这样的东西吗?

0 投票
1 回答
5166 浏览

cmake - 如何使用 CMake 从 CPack 二进制文件中排除文件/目录

我有一个结构如下的项目:

有一些库依赖项位于deps. 所有这些库都有 CMakeinstall命令。

之后install,输出文件将放在build目录中:

就我而言,我将运行cmake package生成一个二进制安装包,它会在_CPack_Packages.

问题是我不需要lib并且include被包含在二进制文件中。但我还没有找到解决方案。

我尝试了以下方法:

  1. CPACK_SOURCE_IGNORE_FILESCPACK_SOURCE_STRIP_FILES

这些是用于包装我认为的来源,不适用于我的情况。

  1. 使用安装后脚本instal(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/clean.cmake")删除不必要的文件/目录。

clean.cmake, if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/ProjectA.lib")returnedFALSE中,脚本运行时目录中没有任何内容${CMAKE_INSTALL_PREFIX},但完成后我可以找到文件。

  1. 尝试修改install_manifest.txt. 我还没有找到正确访问此文件的方法。我不确定这是否可行。

感谢您的帮助!


编辑:

install命令如下: