I wanted to build a Windows installer for a 64 bit Visual Studio application that was build-managed using CMake. This post makes use of the example source code downloadable from https://cmake.org/Wiki/File:ComponentExampleStart.zip.
Add in CPACK macros to CMakeLists.txt
- Download and extract the example zip file into a folder e.g. D:\Temp\ComponentExampleStart\ as shown below. I then created a build sub-folder build underneath the D:\Temp\ComponentExampleStart\Source\ folder.
- Use a text editor and edit the CMakeLists.txt file to add in CPACK macros according to the Wiki. An edited example is shown below.
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) project(MyLib) 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 ) # # CPACK macros below here # 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") # Define components and their display names set (CPACK_COMPONENTS_ALL applications libraries headers) set (CPACK_COMPONENT_APPLICATIONS_DISPLAY_NAME "MyLib Applications") set (CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries") set (CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ Headers") # Human readable component descriptions set (CPACK_COMPONENT_APPLICATIONS_DESCRIPTION "An extremely useful application that makes use of MyLib") set (CPACK_COMPONENT_LIBRARIES_DESCRIPTION "Static libraries used to build programs with MyLib") set (CPACK_COMPONENT_HEADERS_DESCRIPTION "C/C++ header files for use with MyLib") # Define dependencies between components set (CPACK_COMPONENT_HEADERS_DEPENDS libraries) # Define groups set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime") set(CPACK_COMPONENT_LIBRARIES_GROUP "Development") set(CPACK_COMPONENT_HEADERS_GROUP "Development") set(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION "All of the tools you'll ever need to develop software") # Define NSIS installation types set(CPACK_ALL_INSTALL_TYPES Full Developer) set(CPACK_COMPONENT_LIBRARIES_INSTALL_TYPES Developer Full) set(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full) set(CPACK_COMPONENT_APPLICATIONS_INSTALL_TYPES Full) # Must be after the last CPACK macros include(CPack)
Generate the Visual Studio solution
- Open up a Command Prompt. Change to the build directory.
D:> cd \temp\ComponentExampleStart\Source\build - Use the cmake command to generate the build files.
D:> cmake -G "Visual Studio 14 2015 Win64" ..
The build files are generated.
Build the Visual Studio solution and generate the installer
- Using Visual Studio, open up the generated solution e.g. MyLib.sln.
- Since I wanted a release build, in Visual Studio I changed from Debug to Release, as shown below. Then I selected Build.
The release binaries are generated. - Next, in the Solution Explorer, select and mouse right click on the PACKAGE project.
A pop down menu appears. - Choose Build.
CPack processing message appears.
The NSIS installer is generated.
No comments:
Post a Comment