mirror of
https://github.com/ttroy50/cmake-examples.git
synced 2025-12-18 20:24:35 +03:00
add debian package generator
This commit is contained in:
15
06-installer/README.adoc
Normal file
15
06-installer/README.adoc
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
= Installers
|
||||||
|
|
||||||
|
:toc:
|
||||||
|
:toc-placement!:
|
||||||
|
|
||||||
|
toc::[]
|
||||||
|
|
||||||
|
[[intro]]
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
CMake has the ability to create installers for multiple platforms using a program
|
||||||
|
called link:https://cmake.org/Wiki/CMake:CPackPackageGenerators[CPack].
|
||||||
|
CPack includes the ability to create Linux RPM, deb and gzip distributions
|
||||||
|
of both binaries and source code. It also includes teh ability to create NSIS files for Microsoft Windows.
|
||||||
77
06-installer/deb/CMakeLists.txt
Normal file
77
06-installer/deb/CMakeLists.txt
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
|
||||||
|
project(cmake_examples_deb)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${PROJECT_SOURCE_DIR}/inc
|
||||||
|
)
|
||||||
|
|
||||||
|
# set a project version
|
||||||
|
set (deb_example_VERSION_MAJOR 0)
|
||||||
|
set (deb_example_VERSION_MINOR 2)
|
||||||
|
set (deb_example_VERSION_PATCH 2)
|
||||||
|
set (deb_example_VERSION "${deb_example_VERSION_MAJOR}.${deb_example_VERSION_MINOR}.${deb_example_VERSION_PATCH}")
|
||||||
|
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Create a library
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# Source files to be used in the library
|
||||||
|
set(library_SOURCES
|
||||||
|
src/Hello.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
#Generate the shared library from the library sources
|
||||||
|
add_library(cmake_examples_deb SHARED ${library_SOURCES})
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Create an executable
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# Source fles for the binary
|
||||||
|
set(binary_SOURCES
|
||||||
|
src/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add an executable with the above sources
|
||||||
|
add_executable(cmake_examples_deb_bin ${binary_SOURCES})
|
||||||
|
|
||||||
|
# link the new hello_library target with the hello_binary target
|
||||||
|
target_link_libraries( cmake_examples_deb_bin
|
||||||
|
cmake_examples_deb
|
||||||
|
)
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Install
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
install (TARGETS cmake_examples_deb_bin
|
||||||
|
DESTINATION bin)
|
||||||
|
|
||||||
|
# Library
|
||||||
|
# Note: may not work on windows
|
||||||
|
install (TARGETS cmake_examples_deb
|
||||||
|
LIBRARY DESTINATION lib)
|
||||||
|
|
||||||
|
# Config
|
||||||
|
install (FILES cmake-examples.conf
|
||||||
|
DESTINATION etc)
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# Create DEB
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
# Tell CPack to generate a .deb package
|
||||||
|
set(CPACK_GENERATOR "DEB")
|
||||||
|
|
||||||
|
# Set a Package Maintainer.
|
||||||
|
# This is required
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Thom Troy")
|
||||||
|
|
||||||
|
# Set a Package Version
|
||||||
|
set(CPACK_PACKAGE_VERSION ${deb_example_VERSION})
|
||||||
|
|
||||||
|
# Include CPack
|
||||||
|
include(CPack)
|
||||||
157
06-installer/deb/README.adoc
Normal file
157
06-installer/deb/README.adoc
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
= Creating deb files
|
||||||
|
:toc:
|
||||||
|
:toc-placement!:
|
||||||
|
|
||||||
|
toc::[]
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
This example shows how to generate a Linux installers using the link:https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html[deb]
|
||||||
|
format.
|
||||||
|
|
||||||
|
The files in this tutorial are below:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ tree
|
||||||
|
.
|
||||||
|
├── cmake-examples.conf
|
||||||
|
├── CMakeLists.txt
|
||||||
|
├── inc
|
||||||
|
│ └── Hello.h
|
||||||
|
└── src
|
||||||
|
├── Hello.cpp
|
||||||
|
└── main.cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
* CMakeLists.txt - Contains the CMake commands you wish to run
|
||||||
|
* cmake-examples.conf - An example configuration file
|
||||||
|
* inc/Hello.h - The header file to include
|
||||||
|
* src/Hello.cpp - A source file to compile
|
||||||
|
* src/main.cpp - The source file with main
|
||||||
|
|
||||||
|
# Concepts
|
||||||
|
|
||||||
|
## CPack Generator
|
||||||
|
|
||||||
|
A CPack Generator can be used by a `make package` target to create an installer.
|
||||||
|
|
||||||
|
In the case of Debian packages you can tell CMake to create a generator using the following:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
set(CPACK_GENERATOR "DEB")
|
||||||
|
----
|
||||||
|
|
||||||
|
After setting various settings to describe the package you must then tell CMake to
|
||||||
|
include the CPack generator using
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
include(CPack)
|
||||||
|
----
|
||||||
|
|
||||||
|
Once included all files that would typically be installed using a `make install` target
|
||||||
|
can now be packaged into a Debian package.
|
||||||
|
|
||||||
|
## Debian Package Settings
|
||||||
|
|
||||||
|
Various settings for the package are exposed by CPack. In this example we set the
|
||||||
|
following:
|
||||||
|
|
||||||
|
[source,cmake]
|
||||||
|
----
|
||||||
|
# Set a Package Maintainer.
|
||||||
|
# This is required
|
||||||
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Thom Troy")
|
||||||
|
|
||||||
|
# Set a Package Version
|
||||||
|
set(CPACK_PACKAGE_VERSION ${deb_example_VERSION})
|
||||||
|
----
|
||||||
|
|
||||||
|
Which sets the maintainer and version. More debian specific settings are specified below
|
||||||
|
or at link:https://cmake.org/Wiki/CMake:CPackPackageGenerators#Debian_Generator_specific_settings[the CPack Wiki]
|
||||||
|
|
||||||
|
[cols=",",options="header",]
|
||||||
|
|=======================================================================
|
||||||
|
|Variable |Info
|
||||||
|
|CPACK_DEBIAN_PACKAGE_MAINTAINER |Maintainer information
|
||||||
|
|
||||||
|
|CPACK_PACKAGE_DESCRIPTION_SUMMARY |Package short description
|
||||||
|
|
||||||
|
|CPACK_PACKAGE_DESCRIPTION |Package description
|
||||||
|
|
||||||
|
|CPACK_DEBIAN_PACKAGE_DEPENDS |For advanced users to add custom scripts.
|
||||||
|
|
||||||
|
|CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA |The build directory you are currently in.
|
||||||
|
|
||||||
|
|CPACK_DEBIAN_PACKAGE_SECTION |Package section (see link:http://packages.debian.org/stable/[here])
|
||||||
|
|
||||||
|
|CPACK_DEBIAN_PACKAGE_VERSION |Package version
|
||||||
|
|=======================================================================
|
||||||
|
|
||||||
|
# Building the Example
|
||||||
|
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
$ mkdir build
|
||||||
|
|
||||||
|
$ cd build/
|
||||||
|
|
||||||
|
$ cmake ..
|
||||||
|
-- The C compiler identification is GNU 4.8.4
|
||||||
|
-- The CXX compiler identification is GNU 4.8.4
|
||||||
|
-- Check for working C compiler: /usr/bin/cc
|
||||||
|
-- Check for working C compiler: /usr/bin/cc -- works
|
||||||
|
-- Detecting C compiler ABI info
|
||||||
|
-- Detecting C compiler ABI info - done
|
||||||
|
-- Check for working CXX compiler: /usr/bin/c++
|
||||||
|
-- Check for working CXX compiler: /usr/bin/c++ -- works
|
||||||
|
-- Detecting CXX compiler ABI info
|
||||||
|
-- Detecting CXX compiler ABI info - done
|
||||||
|
-- Configuring done
|
||||||
|
-- Generating done
|
||||||
|
-- Build files have been written to: /home/matrim/workspace/cmake-examples/06-installer/deb/build
|
||||||
|
|
||||||
|
$ make help
|
||||||
|
The following are some of the valid targets for this Makefile:
|
||||||
|
... all (the default if no target is provided)
|
||||||
|
... clean
|
||||||
|
... depend
|
||||||
|
... cmake_examples_deb
|
||||||
|
... cmake_examples_deb_bin
|
||||||
|
... edit_cache
|
||||||
|
... install
|
||||||
|
... install/local
|
||||||
|
... install/strip
|
||||||
|
... list_install_components
|
||||||
|
... package
|
||||||
|
... package_source
|
||||||
|
... rebuild_cache
|
||||||
|
... src/Hello.o
|
||||||
|
... src/Hello.i
|
||||||
|
... src/Hello.s
|
||||||
|
... src/main.o
|
||||||
|
... src/main.i
|
||||||
|
... src/main.s
|
||||||
|
|
||||||
|
$ make package
|
||||||
|
Scanning dependencies of target cmake_examples_deb
|
||||||
|
[ 50%] Building CXX object CMakeFiles/cmake_examples_deb.dir/src/Hello.cpp.o
|
||||||
|
Linking CXX shared library libcmake_examples_deb.so
|
||||||
|
[ 50%] Built target cmake_examples_deb
|
||||||
|
Scanning dependencies of target cmake_examples_deb_bin
|
||||||
|
[100%] Building CXX object CMakeFiles/cmake_examples_deb_bin.dir/src/main.cpp.o
|
||||||
|
Linking CXX executable cmake_examples_deb_bin
|
||||||
|
[100%] Built target cmake_examples_deb_bin
|
||||||
|
Run CPack packaging tool...
|
||||||
|
CPack: Create package using DEB
|
||||||
|
CPack: Install projects
|
||||||
|
CPack: - Run preinstall target for: cmake_examples_deb
|
||||||
|
CPack: - Install project: cmake_examples_deb
|
||||||
|
CPack: Create package
|
||||||
|
CPack: - package: /home/matrim/workspace/cmake-examples/06-installer/deb/build/cmake_examples_deb-0.2.2-Linux.deb generated.
|
||||||
|
|
||||||
|
$ ls
|
||||||
|
CMakeCache.txt cmake_examples_deb-0.2.2-Linux.deb cmake_examples_deb_bin CMakeFiles cmake_install.cmake CPackConfig.cmake _CPack_Packages CPackSourceConfig.cmake install_manifest.txt libcmake_examples_deb.so Makefile
|
||||||
|
|
||||||
|
----
|
||||||
1
06-installer/deb/cmake-examples.conf
Normal file
1
06-installer/deb/cmake-examples.conf
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Sample configuration file that could be installed
|
||||||
10
06-installer/deb/inc/Hello.h
Normal file
10
06-installer/deb/inc/Hello.h
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#ifndef __HELLO_H__
|
||||||
|
#define __HELLO_H__
|
||||||
|
|
||||||
|
class Hello
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void print();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
8
06-installer/deb/src/Hello.cpp
Normal file
8
06-installer/deb/src/Hello.cpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "Hello.h"
|
||||||
|
|
||||||
|
void Hello::print()
|
||||||
|
{
|
||||||
|
std::cout << "Hello Install!" << std::endl;
|
||||||
|
}
|
||||||
8
06-installer/deb/src/main.cpp
Normal file
8
06-installer/deb/src/main.cpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include "Hello.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
Hello hi;
|
||||||
|
hi.print();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user