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

i5desfxk  于 2023-08-05  发布在  Windows
关注(0)|答案(1)|浏览(212)

我想创建一个基于C++的系统,我的建设跨平台安装程序。
我使用CMake来构建所有内容,如果我能使用CPack来制作安装程序就太好了。我已经有了在OSX上工作的CPACK,但我不能让它在Windows上工作。为了使事情变得更简单,我试图让https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/Component-Install-With-CPack上的示例与NSIS安装程序软件一起工作。配置后,我无法在任何地方找到NSIS安装程序(使用VS 2010 Win64生成器)。
也许我很困惑,但我认为可以只使用源代码,CMake,CPack和NSIS创建安装包,而不需要Visual Studio。这可能吗?
一个完整教程的链接(https://gitlab.kitware.com/cmake/community/-/wikis/doc/cpack/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)

字符串

ecr0jaav

ecr0jaav1#

...我认为可以只使用源代码、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

相关问题