标签: cpack

如何使用CPack以特定方式打包QT应用程序的依赖项?

我有一个简单的QT项目.我正在Linux上开发.但它最终要部署到Linux,Mac和Windows.

我正在尝试打包它以便分发.我遇到了查找依赖项并将其打包并以惯用方式执行此操作的问题(IOW:没有硬编码的DLL路径或包含我的源代码库中的DLL)

对于Windows端口,我正在使用MinGW并进行如下编译:

mingw64-cmake -G "Unix Makefiles" .. -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-mingw64.cmake
make && ctest && make install && cpack -G "TGZ" && cpack -G "NSIS64"
Run Code Online (Sandbox Code Playgroud)

我已将其设置为生成tar.gz文件和NSIS安装程序.目前没有特别的理由让NSIS而不是Wix.这只是为了解决问题.

它编译Windows可执行文件,但它不包括运行该程序所需的DLL.就是这些:

Libgcc_s_seh-1.dll
Qt5Core.dll
Qt5Gui.dll
Run Code Online (Sandbox Code Playgroud)

在我的计算机上快速查找显示这些DLL存在于此处:

/usr/x86_64-w64-mingw32/sys-root/mingw/bin/Qt5Widgets.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll
...
Run Code Online (Sandbox Code Playgroud)

有没有办法自动让CPack挖掘DLL并将它们包含在安装程序中?

这是我的CMakeLists.txt档案:

cmake_minimum_required(VERSION 2.8.11)

project(myapp)

enable_testing()

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)

add_executable(myapp WIN32 main.cpp mainwindow.cpp resources.qrc)

target_link_libraries(myapp Qt5::Widgets)
target_link_libraries(myapp Qt5::Core)
target_link_libraries(myapp Qt5::Gui)

INSTALL(TARGETS myapp
        BUNDLE DESTINATION .
        RUNTIME DESTINATION …
Run Code Online (Sandbox Code Playgroud)

linux windows qt mingw cpack

9
推荐指数
1
解决办法
838
查看次数

没有出现cmake/cpack组件的debuginfo rpm包

CentOS6.9/cmake 3.6.1

在我的项目中,我正在尝试创建几个组件,而不是为它们构建运行时,开发和调试包,但是我无法为每个组件生成超过一个rpm.我创建了一个小项目来显示问题:

./include/Box.hpp

namespace room {

class Box {
public:
    Box(int volume);
    int get_volume() const;
private:
    int m_volume;
};

}
Run Code Online (Sandbox Code Playgroud)

./source/Box.cpp

#include "Box.hpp"

namespace room {

Box::Box(int volume)
    : m_volume(volume)
{
}

int Box::get_volume() const
{
    return this->m_volume;
}

}
Run Code Online (Sandbox Code Playgroud)

./source/app.cpp

#include "Box.hpp"

int main() {
    room::Box box(5);
    return box.get_volume();
}
Run Code Online (Sandbox Code Playgroud)

./CMakeLists.txt

cmake_minimum_required(VERSION 3.6)

project (home)

set(CMAKE_INSTALL_PREFIX "/usr/local")
set(CMAKE_BUILD_TYPE "RelWithDebInfo")

include_directories("include")
file(GLOB SRC_FILES "source/*.cpp")
file(GLOB HDR_FILES "include/*.hpp")

add_executable(${PROJECT_NAME} ${SRC_FILES})
install(FILES ${HDR_FILES} DESTINATION "include" COMPONENT devel)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION …
Run Code Online (Sandbox Code Playgroud)

c++ rpm cmake cpack

9
推荐指数
1
解决办法
489
查看次数

使用packagemaker和cpack for Mac OS X.

我需要使用CPack和PackageMaker作为生成器为Mac OS X的产品创建安装程序.我做了一些小工作,但我想找到很多东西.

set(CPACK_PACKAGE_NAME "MyApp")
  set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") 
  set(CMAKE_INSTALL_PREFIX /Applications)
  set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
  set(CPACK_RESOURCE_FILE_README "${PACKAGE_BINARY_DIR}/Readme.txt")
  set(CPACK_RESOURCE_FILE_LICENSE "${PACKAGE_BINARY_DIR}/EULA.txt")   
  set(CPACK_RESOURCE_FILE_WELCOME "${PACKAGE_BINARY_DIR}/Welcome.txt")
  set(CPACK_GENERATOR PackageMaker)

  install(DIRECTORY ${PACKAGE_BINARY_DIR}/my_app.app DESTINATION ${CMAKE_INSTALL_PREFIX}/)
  install(PROGRAMS ${PACKAGE_BINARY_DIR}/other_executable DESTINATION ${CMAKE_INSTALL_PREFIX}/my_app.app/Contents/MacOS/)
  install(FILES ${PACKAGE_BINARY_DIR}/com.my_app.my_app_daemon.plist DESTINATION ${CMAKE_INSTALL_PREFIX}/Resources)
Run Code Online (Sandbox Code Playgroud)

你能解释一下:

  1. 如何将自定义图标添加到我的应用程序(打开应用程序目录时)?
  2. 如何向可视化安装程序添加自定义背景?
  3. 如何正确使用后安装程序脚本的标志,以便脚本可以正常工作?
  4. 将"other_executable"添加到我的应用程序的最佳方法是什么?
  5. 我使用正确的方法安装my_app.app吗?
  6. 如何添加我的应用程序到Dock的快捷方式(或其他任何使用的)?

macos cmake packagemaker cpack

8
推荐指数
0
解决办法
1317
查看次数

cpack生成具有与RPM规范冲突的%文件条目的RPM.怎么修?

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

%dir %attr(0755, root, root) "/"
%dir %attr(0755, root, root) "/usr"
%dir %attr(0755, root, root) "/usr/bin"
%dir %attr(0755, root, root) "/usr/share"
%dir %attr(0755, root, root) "/usr/share/applications"
%dir %attr(0755, root, root) "/usr/share/doc"
%dir %attr(0755, root, root) "/usr/share/icons"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable/apps"enter code here
Run Code Online (Sandbox Code Playgroud)

不应该由包声明.

AFAIK,这个要求多年来一直在RPM规范中,但仅在RPM的最新版本(即比4.8.0更新)中强制实施.由于RHEL 7与RPM 4.11.1捆绑在一起,因此在下列期间cpack生成的内容filesystem-3.2-18.el7.x86_64与下面的错误冲突yum install ...:

file / from install of …
Run Code Online (Sandbox Code Playgroud)

rpm cmake cpack

8
推荐指数
1
解决办法
3224
查看次数

使用 cmake 创建多个 Debian 软件包

我有一个由一组可执行文件组成的 cmake 项目,这些文件彼此独立,具有两个共享库。我想将每个可执行文件打包到一个 deb 包中。结果,我得到了一个包含所有程序和库的 deb 包。

部分源代码:

cmake_minimum_required (VERSION 3.12)

set (CPACK_GENERATOR "DEB")
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "i am")
set (CPACK_DEB_COMPONENT_INSTALL 1)
include (CPack)

add_executable (module1 main.cpp)
install (TARGETS module1 
        RUNTIME DESTINATION bin 
        COMPONENT component1)

add_library (my_lib SHARED map.cpp templates.cpp)
add_executable (my_lib main.cpp utils.cpp)
target_link_libraries (module2 PUBLIC my_lib)

install(TARGETS module2 my_lib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        COMPONENT component2)
Run Code Online (Sandbox Code Playgroud)

如何将程序分成不同的deb包?

cmake deb cpack

8
推荐指数
1
解决办法
1544
查看次数

CPack DEB生成器:control-file-has-bad-permissions mdsums 0644!= 0644

我正在开发小型控制台应用程序,我试图使用CPack创建Ubuntu包.Ubuntu版本是13.04,我的主要CPack文件在下面.包是正确创建的,但在尝试使用图形界面安装它时(基本上双击Ubuntu中的deb文件)会出现以下警告:

包质量控制质量不好-file-has-bad-permissions mdsums 0644!= 0644

有谁知道这是什么原因?更重要的是,如何解决它?CMake版本是2.8.10.1,但我也尝试使用2.8.11.2并且没有任何改变.

我已经看到,他们在这里有类似的问题,但没有关于修复的性质

我的主要CPack文件:

INCLUDE(InstallRequiredSystemLibraries)  
SET(CPACK_GENERATOR DEB)
SET(CPACK_PACKAGE_NAME "color")
SET(CPACK_PACKAGE_VERSION "0.8")
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libgcc1 (>= 1:3.4.2-12)")
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")

SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "color - unix console tool for log syntax coloring")

SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.txt")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/Copyright.txt")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_STRIP_FILES "color")
SET(CPACK_PACKAGE_EXECUTABLES "color")
INCLUDE(CPack)
Run Code Online (Sandbox Code Playgroud)

如果有人想看包或做更多研究,github repo(deb文件首先发布).

c++ ubuntu cmake deb cpack

7
推荐指数
1
解决办法
1499
查看次数

如何使用cmake生成.msi安装程序?

我正在尝试生成.msi安装程序cmake.我可以使用一些配置生成.dll.lib文件CMakeLists.txt.请提供CMakeLists.txt生成.msi安装程序的示例.我需要在命令提示符中使用哪些命令?

到目前为止我使用的命令是:

> cmake -G"Visual Studio 10" -H"Root CMakeLists.txt path" -B"path to generate the sln"
> cmake --build "path of the sln" --config Release
> cpack -C Release
output: CPack Error: CPack generator not specified 
Run Code Online (Sandbox Code Playgroud)

我使用以下配置生成.dll.lib文件.

这是我的CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(mydll)
INCLUDE_DIRECTORIES(common/include) 
SET(my_lib_src dllmain.cpp mydll.cpp )
SET_SOURCE_FILES_PROPERTIES(${my_lib_src} PROPERTIES LANGUAGE C)
ADD_LIBRARY(mydll  SHARED ${my_lib_src})
SET_TARGET_PROPERTIES(mydll PROPERTIES 
LINKER_LANGUAGE C
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/common/bin                      
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/common/bin …
Run Code Online (Sandbox Code Playgroud)

windows wix cmake visual-studio-2010 cpack

7
推荐指数
1
解决办法
6926
查看次数

如何让cpack生成正确的开始菜单快捷方式

我想用cmake和cpack为windows上的一些程序创建一个安装程序.我希望能够选择要安装的程序,所选程序将作为快捷方式显示在开始菜单中.这是一个简单的尝试.为每个程序完成了一个组件,但无法弄清楚如何生成开始菜单变量.现在,即使未选择安装它们,所有程序也始终在菜单中.首先是一个简单的程序安装.

#include <iostream>
#include <conio.h>

int main()
{
  std::cout << "prog1" << std::endl;
  _getch();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是CMakeLists.txt文件

cmake_minimum_required( VERSION 2.8 )
project ( CompoTest )

add_executable(prog1 prog1.cpp)
add_executable(prog2 prog2.cpp)
add_executable(prog3 prog3.cpp)

install(TARGETS prog1
        RUNTIME DESTINATION bin
        COMPONENT compo1)
install(TARGETS prog2
        RUNTIME DESTINATION bin
        COMPONENT compo2)
install(TARGETS prog3
        RUNTIME DESTINATION bin
        COMPONENT compo3)

set ( CPACK_PACKAGE_VERSION "1.0.0" )

set(CPACK_PACKAGE_EXECUTABLES 
    prog1 "prog 1"
    prog2 "prog 2"
    prog3 "prog 3"
)

set ( CPACK_COMPONENTS_ALL compo1 compo2 compo3 )
include (CPack)
Run Code Online (Sandbox Code Playgroud)

问题是生成开始菜单快捷方式取决于在安装中选择哪个程序我认为它应该很容易,但似乎不是.是否有可能做到这一点.

更新:我发现 …

c++ nsis cmake cpack

7
推荐指数
1
解决办法
1808
查看次数

在 cmake 中使用 CPack 生成两个不同的包:Linux

我想为我的项目创建两个不同的包。

  1. DCM(包括除 RCM 特定模块之外的所有模块)
  2. RCM(特定模块。)

1. DCM : src/CMakeList.txt

cmake_minimum_required (VERSION 2.8)

add_subdirectory(ecs) # Include all modules

set(CPACK_GENERATOR TGZ)
set(CPACK_PACKAGE_NAME "dcm")
set(CPACK_PACKAGE_VENDOR "AB")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Device Control")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
set(CPACK_PACKAGE_VERSION_BUILD ${BUILD_NUMBER})

set(CPACK_COMPONENTS_ALL DCM RCM )

# Include CPack to introduce the appropriate targets
include(CPack)
Run Code Online (Sandbox Code Playgroud)

2. RCM : src/ecs/mqa/mqa_rcm/CMakeList.txt

set(RCM_SCRIPTS 
commit.sh
install.sh
prepare_for_install.sh
system_check.sh
update_init.sh)

INSTALL(FILES ${RCM_SCRIPTS}
        PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE  WORLD_EXECUTE
        DESTINATION ${RCM_INSTALL_PREFIX}/install
        COMPONENT RCM )
# Create version file
install(FILES "${CMAKE_BINARY_DIR}/version" …
Run Code Online (Sandbox Code Playgroud)

c++ linux cmake package cpack

7
推荐指数
1
解决办法
4006
查看次数

使用 CPack 创建 Brew 包

一直在寻找这个,但找不到示例或好的文档。有没有人有如何使用 cmake 中的 cpack 创建 brew 包的示例?

homebrew cmake cpack

7
推荐指数
1
解决办法
88
查看次数

标签 统计

cpack ×10

cmake ×9

c++ ×4

deb ×2

linux ×2

rpm ×2

windows ×2

homebrew ×1

macos ×1

mingw ×1

nsis ×1

package ×1

packagemaker ×1

qt ×1

ubuntu ×1

visual-studio-2010 ×1

wix ×1