首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows上使用CMake + CPack + NSIS创建安装程序?

如何在Windows上使用CMake + CPack + NSIS创建安装程序?
EN

Stack Overflow用户
提问于 2012-10-31 01:06:38
回答 1查看 28.5K关注 0票数 27

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

我使用CMake来构建一切,如果我可以使用CPack来制作安装程序,那就太好了。我已经让CPack在OSX上工作了,但是我不能让它在Windows上工作。为了简单起见,我尝试让http://www.cmake.org/Wiki/CMake:Packaging_With_CPack上的示例与NSIS安装程序软件一起使用。在配置之后,我在任何地方都找不到NSIS安装程序(使用VS2010 Win64生成器)。

也许我很困惑,但我认为可以只使用源代码、CMake、CPack和NSIS来创建安装包,而不需要任何Visual Studio。这个是可能的吗?

一个完整教程的链接( http://www.cmake.org/Wiki/CMake:Component_Install_With_CPack上的链接跳过了相关信息以使NSIS正常工作,并且没有提到生成器或编译器)将非常有帮助,或者一个关于如何获得这个虚构的NSIS安装程序的基本解释将是非常棒的。

下面是上面示例的CMakeLists.txt:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 07:13:12

...我认为可以只使用源代码、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内部生成包项目,也可以通过执行以下操作直接调用msbuild:

代码语言:javascript
运行
复制
msbuild /P:Configuration=Release PACKAGE.vcxproj

从您的build目录中的VS命令提示符。

这将在build目录中生成名为MyLib-1.0.0-win64.exe的安装程序。

如果您只想使用CMake,那么调用msbuild的另一种方法是:

代码语言:javascript
运行
复制
cmake --build . --target PACKAGE.vcxproj --config Release

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

代码语言:javascript
运行
复制
cmake --build . --config Release
cpack -C Release
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13144181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档