问题标签 [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.
cmake - CPack NSIS,为 Windows 生成安装程序
我正在尝试在 VS 项目中运行数据包生成器,它在编译时崩溃,因为在从目标和文件安装时使用了绝对路径。
我检查了两次,所有安装目录都是相对的。我将很多变量设置为 ${PROJECT_BINARY_DIR} 的子文件夹(应该是相对的),例如:
CMAKE/CPACK 是否将这些变量解释为绝对路径?如果是这样,有没有办法让 CPack 与这些变量一起正常工作?涉及子相对路径时如何使用 CPack?
谢谢
cmake - CPack:如何使用导出来创建库包?缺少 *Targets-noconfig.cmake 文件
更新
看起来它是 Windows cpack 版本的错误 - 在 Linux(Ubuntu)下,cpack 命令丢失了文件。当我有更多时间时,我会做更多的研究并发布结果。
注意:我完全改变了这个问题,因为我能够简化它并创建新的、更短的示例。核心问题,但是丝毫没有改变。
问题描述
我有一个库项目,我们称之为 Foo,我使用cpack
命令打包它。这个包包含FooConfig.cmake
和FooTargets.cmake
文件(由cmake机制导出的第二个)。问题是,这还不足以让 cmake 使用它。find_package()
找到它,但与 链接时foo
,No rule to make target foo-NOTFOUND', needed by bar.exe'. Stop.
出现错误。
但如果我make install DESTDIR=./out_dir
用FooTargets-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
macos - 通过 Open 运行 OSX Bundle
我正在尝试在涉及 OpenCV 和 Qt 的 OSX 上使用 CMake/CPack 制作 OSX 包(尽管我认为此时这些依赖关系并不重要)。一切都可以编译并且包创建得很好,我有一个脚本可以修改必要的库路径,如果我从包中的终端运行它,我正在制作的可执行文件就可以工作。我遇到的问题是,如果我尝试通过 open 命令运行 MyApp.app 文件,或者只是双击应用程序,它会给我错误:
我已经看到其他涉及修改权限的 LSOpenURLsWithRole() 错误的其他解决方案,但这对我没有帮助。此外,此错误代码是“未知错误”,因此我不确定如何继续。
cmake - CMake:在使用 cpack 创建的 deb 包中保留文件权限?
我用 cpack 创建了一个 deb 包,但它没有保留目标机器上的原始权限。这导致我的应用程序的用户在安装后无法执行它。
cmake - cpack 生成带有 %files 条目的 RPM,这些条目与 RPM 规范冲突。怎么修?
最近,我需要确保我们的软件可以打包使用cpack
RHEL 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_64
yum install ...
我尝试使用一个cmake
包含以下内容的小模块:
并将其包含在CMakeLists.txt
's之前include(CPack)
。但是生成的 RPM 仍然包含这些系统目录 :(
作为一种临时解决方法,我一直在使用文件冲突中给出的提示来安装带有 "Filesystem" 的包,即使用该rpmrebuild
实用程序删除该部分中的这些系统目录条目%files
。显然,这根本不是解决办法。
有人找到更好的方法吗?
cmake - 安装 CMake 组件时如何获取将要安装的文件列表
有没有办法以编程方式(在 CMake 中)知道如果COMPONENT
安装了 a (类似于get_property
组件)将安装哪些文件?
目前,我正在安装一个COMPONENT
临时位置进行打包(不使用CPack进行打包),然后使用自定义命令进行打包。我在 CMake 打包期间调用以下命令。
我想知道是否可以获得文件列表,以便我只能在包中明确包含这些文件?或者可能将它们作为输出添加到自定义命令?
cmake - CPack 使用来自不同源代码树的可执行文件创建包
问题如下:
项目结构:
我想要实现的是:
- 带有SomeTool二进制文件的包(让它成为rpm或deb) ;
- 包含FirstApp、SecondApp和SomeOtherTool二进制文件;
我所知道的:
- CPack 将安装命令中定义的内容放入包内容中;
- CPack 不能
include(CPack)
在同一棵树中被调用 ( ) 两次(例如,它不能在 CMakeLists.txtsrc
级别 ANDSecondApp
级别调用);
我有什么
在ProjectDir/tools/SomeTool/CMakeLists.txt
我(这是伪代码)中:
这样我就可以调用它,它会创建带有 content的make SomeTool-package
package ( ) 。伟大的!SomeTool.rpm
/usr/bin/SomeTool
我可以CMakeLists.txt
在ProjectDir/src/
目录中有非常相似的:
这样我可以调用make MainProject-package
,它会创建MainProject.rpm
包含内容的包 ()/usr/bin/FirstApp
和/usr/bin/SecondApp
. 伟大的!
SomeOtherTool也有一个CMakeLists.txt
看起来与FirstApp和SecondApp CMakeLists.txt
相同的东西,我可以调用make SomeOtherTool
它,它会生成SomeOtherTool
二进制文件。
问题
由于 CPack 正在将连接到install
命令的东西放入包中,我如何将SomeOtherTool与我的MainProject-package连接?
我的解决方案是(是)install
在末尾添加另一个子句,src/CMakeLists.txt
如下所示:
还有其他方法吗?这个解决方案看起来不干净。如果我更改SomeOtherTool可执行文件名称,我也必须在这里更改它。安装路径也是如此。
installation - 向 cpack 添加额外的命令 - NSIS 打包程序/安装程序
我想使用已经存在的文件使用 CPack 和 NSIS 为 windows 打包我的项目,
我想在其中添加一个额外的GeneratorConfig.cmake
命令,该命令将复制一个.ini
名为.myProject.ini
%APPDATA%/myProject/myProject.ini
这是 GeneratorConfig.cmake
我尝试使用下面的代码来执行此操作,但这会构建包但不会复制到myProject.ini
任何地方。
任何帮助或建议将不胜感激。
rpm-spec - 在 CPack 中将文件标记为配置文件
创建 RPM 包时:如何告诉 CPack 将文件视为配置文件,以便在更新 RPM 时不会被覆盖?
在这种情况下, rpm-spec 中使用了%config指令。CPack中有这样的东西吗?
cmake - 如何使用 CMake 从 CPack 二进制文件中排除文件/目录
我有一个结构如下的项目:
有一些库依赖项位于deps
. 所有这些库都有 CMakeinstall
命令。
之后install
,输出文件将放在build
目录中:
就我而言,我将运行cmake package
生成一个二进制安装包,它会在_CPack_Packages
.
问题是我不需要lib
并且include
被包含在二进制文件中。但我还没有找到解决方案。
我尝试了以下方法:
CPACK_SOURCE_IGNORE_FILES
和CPACK_SOURCE_STRIP_FILES
。
这些是用于包装我认为的来源,不适用于我的情况。
- 使用安装后脚本
instal(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/clean.cmake")
删除不必要的文件/目录。
在clean.cmake
, if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/ProjectA.lib")
returnedFALSE
中,脚本运行时目录中没有任何内容${CMAKE_INSTALL_PREFIX}
,但完成后我可以找到文件。
- 尝试修改
install_manifest.txt
. 我还没有找到正确访问此文件的方法。我不确定这是否可行。
感谢您的帮助!
编辑:
install
命令如下: