# CPack Example: User-selectable Installation Components # # In this example, we have a simple library (mylib) with an example # application (mylibapp). We create a binary installer that allows # users to select which pieces will be installed: the example # application, the library binaries, and/or the header file. cmake_minimum_required(VERSION 3.5) project(CPackComponents) # Create the mylib library add_library(mylib mylib.cpp) # Create the mylibapp application add_executable(mylibapp mylibapp.cpp) target_link_libraries(mylibapp mylib) # On Linux, enable using an absolute install path to verify that # CMAKE_INSTALL_PREFIX and CPACK_SET_DESTDIR interact properly. # # But only use absolute paths if not targeting an NSIS installer # as indicated by CPACK_BINARY_NSIS. (If we allow this, the test # fails on Linux machines with makensis installed when we are not # cross-compiling...) # if(UNIX AND NOT APPLE) if(NOT CPACK_BINARY_NSIS) set(mylib_install_to_absolute_path ON) endif() endif() if(mylib_install_to_absolute_path) set(CMAKE_INSTALL_PREFIX "/opt/mylib") set(CPACK_SET_DESTDIR ON) endif() # Create installation targets. Note that we put each kind of file # into a different component via COMPONENT. These components will # be used to create the installation components. install(TARGETS mylib ARCHIVE DESTINATION lib COMPONENT libraries) install(TARGETS mylibapp RUNTIME DESTINATION bin COMPONENT applications) install(FILES mylib.h DESTINATION include COMPONENT headers) install(FILES "Issue 7470.html" DESTINATION docs COMPONENT documentation) if(mylib_install_to_absolute_path) install(FILES mylib.cpp DESTINATION /opt/mylib-source COMPONENT source) endif() # CPack boilerplate for this project set(CPACK_PACKAGE_NAME "MyLib") set(CPACK_PACKAGE_VENDOR "CMake.org") set(CPACK_PACKAGE_CONTACT "somebody@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") # Settings used when building NSIS installers set(CPACK_NSIS_MENU_LINKS "ftp://ftpserver" "Test Ftp Link" "ftps://ftpsserver" "Test Ftps Link" "https://cmake.org" "CMake Web Site" "https://github.com/" "Test Https Link" "mailto:kitware@kitware.com" "Test MailTo Link" "news://newsserver" "Test News Link" ) # Suggested default root for end users of the installer: set(CPACK_NSIS_INSTALL_ROOT "C:/Program Files/CMake Tests Install Root") # Include CPack to introduce the appropriate targets include(CPack) # Installation types cpack_add_install_type(Full DISPLAY_NAME "Everything") cpack_add_install_type(Developer) # Component groups cpack_add_component_group(Runtime) cpack_add_component_group(Development EXPANDED DESCRIPTION "All of the tools you'll ever need to develop software") # Components cpack_add_component(applications DISPLAY_NAME "MyLib Application" DESCRIPTION "An extremely useful application that makes use of MyLib" GROUP Runtime INSTALL_TYPES Full) cpack_add_component(documentation DISPLAY_NAME "MyLib Documentation" DESCRIPTION "The extensive suite of MyLib Application documentation files" GROUP Runtime INSTALL_TYPES Full) cpack_add_component(libraries DISPLAY_NAME "Libraries" DESCRIPTION "Static libraries used to build programs with MyLib" GROUP Development INSTALL_TYPES Developer Full) cpack_add_component(headers DISPLAY_NAME "C++ Headers" DESCRIPTION "C/C++ header files for use with MyLib" GROUP Development DEPENDS libraries INSTALL_TYPES Developer Full) if(mylib_install_to_absolute_path) cpack_add_component(source DISPLAY_NAME "C++ Source Files" DESCRIPTION "C/C++ source files to build MyLib" GROUP Development DEPENDS libraries INSTALL_TYPES Developer Full) endif()