【环境信息】
OS版本:openEuler-20.03-LTS-SP1
repo源:everything,os
【问题复现步骤】
1、安装二进制包cmake:dnf install cmake -y
2、安装编译包gcc:dnf install gcc-c++ -y
3、安装包make:dnf install make -y
3、构建一个CMake项目。目录结构为
build
main.c
CMakeLists.txt
(1)build是放生成cache文件的目录
(2)编写main.c,如下:
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
(3)在main.c相同目录下编写CMakeLists.txt,内容如下:
cmake_minimum_required (VERSION 2.8)
project (demo)
add_executable(main main.c)
set(CPACK_PACKAGE_NAME "demo1")
set(CPACK_SET_DESTDIR ON)
set(CPACK_INSTALL_PREFIX "install")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_RPM_PACKAGE_GROUP "demo1")
set(CPACK_PACKAGE_VENDOR "demo1")
set(CPACK_RPM_PACKAGE_LICENSE "Apache 2.0 + Common Clause 1.0")
include(CPack)
4、进入build目录
5、执行命令:cmake .. (生存缓存文件,便于下步使用)
6、执行命令:cpack -B cpackdir -G "STGZ" 预期结果:1
【预期结果】
1、-B定义打包工作的目录为cpackdir,会在cpackdir目录下生成一个_CPack_Packages目录和demo1-1.0.0-Linux.sh文件
【实际结果】
1、执行命令报错:
CMake Error: RelativePath must be passed a full path to local: cpackdir/_CPack_Packages/Linux/STGZ/demo1-1.0.0-Linux
CPack Error: Problem compressing the directory
CPack Error: Error when generating package: demo1
Note:openEuler-20.09中此命令执行成功没有错误,唯一的区别是版本不同,openEuler-20.09中cmake的版本是3.18.0,openEuler-20.03-LTS-SP1中cmake的版本是3.16.5
此问题为非问题,建议-B选项后面跟绝对路径。
报错的原因是低版本cmake的-B选项需要加上绝对路径,由于新版本修改了对此参数的处理,可以将参数写成相对路径造成了此差异。由于修改量大,不合入新版本特性。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
给cpack -B参数加上绝对路径后,问题不再复现:
登录 后才可以发表评论