【问题标题】:How to create an installer with CMake + CPack + NSIS on Windows?如何在 Windows 上使用 CMake + CPack + NSIS 创建安装程序?
【发布时间】:2012-10-20 02:22:11
【问题描述】:

我想为我正在构建的基于 C++ 的系统创建一个跨平台安装程序。

我使用 CMake 来构建一切,如果我可以使用 CPack 来制作安装程序,那就太好了。我已经让 CPack 在 OSX 上运行,但我无法让它在 Windows 上运行。为了让事情变得更简单,我尝试在http://www.cmake.org/Wiki/CMake:Packaging_With_CPack 获取示例以使用 NSIS 安装程序软件。配置后我在任何地方都找不到 NSIS 安装程序(使用 VS 2010 Win64 生成器)。

也许我很困惑,但我认为可以仅使用源代码、CMake、CPack 和 NSIS 创建安装包,而无需 Visual Studio。这可能吗?

完整教程的链接(http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack 处的链接跳过了相关信息以使 NSIS 正常工作,并且没有提及生成器或编译器)将非常有帮助,或者是我如何获得此内容的基本解释神秘生成的 NSIS 安装程序会很棒。

这是上面示例的 CMakeLists.txt:

cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
project(StPMS)

add_library(mylib mylib.cpp)

add_executable(mylibapp mylibapp.cpp)
target_link_libraries(mylibapp mylib)

 install(TARGETS mylib 
   ARCHIVE
   DESTINATION lib
   COMPONENT libraries)
 install(TARGETS mylibapp
   RUNTIME
   DESTINATION bin
   COMPONENT applications)
 install(FILES mylib.h
   DESTINATION include
   COMPONENT headers)

set(CPACK_GENERATOR NSIS)
set(CPACK_PACKAGE_NAME "MyLib")
set(CPACK_PACKAGE_VENDOR "CMake.org")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyLib - CPack Component Installation Example")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VERSION_MAJOR "1")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CPack Component Example")
SET(CPACK_NSIS_MODIFY_PATH ON)

INCLUDE(CPack)

【问题讨论】:

    标签: c++ installation cmake nsis cpack


    【解决方案1】:

    ...我认为可以只使用源代码、CMake、CPack 和 NSIS 创建安装包,而无需 Visual Studio。这可能吗?

    有点。这取决于您所说的“不需要 Visual Studio”是什么意思。您需要一个构建工具来实际创建 lib 和 exe。在 Windows 上,您需要 Visual Studio 的 msbuild 之类的东西,尤其是当您将 "Visual Studio 10 Win64" 指定为生成器时。

    如果您的意思是“不运行 Visual Studio”,那么答案是肯定的。您可以使用 --build 参数让 CMake 执行您选择的构建工具。

    运行 CMake 后,您最终会在构建目录中获得一个文件 PACKAGE.vcxproj。它正在构建它将创建安装程序。您可以从 Visual Studio 内部构建 PACKAGE 项目,也可以通过执行以下操作直接调用 msbuild:

    msbuild /P:Configuration=Release PACKAGE.vcxproj
    

    在 VS 命令提示符下从您的构建目录。

    这应该会在您的构建目录中生成名为 MyLib-1.0.0-win64.exe 的安装程序。


    如果您只想使用 CMake,那么调用 msbuild 的替代方法是:

    cmake --build . --target PACKAGE.vcxproj --config Release
    


    或者您可以先构建解决方案,然后调用 CPack 创建安装程序:

    cmake --build . --config Release
    cpack -C Release
    

    【讨论】:

    • 完美。一旦达到使用 VS 的目的,我找不到任何关于如何做的连贯文档。非常感谢您的帮助!
    • 也许您可以了解 cpack 是如何或为什么当 ctest 和 install 目标是时它没有集成到 VS 中 - 请参阅 stackoverflow.com/questions/59645959/…
    猜你喜欢
    • 1970-01-01
    • 2022-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2021-11-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多