24
Das CMake-Buildsystem – Programmentwicklung leichtgemacht Wolfgang Dautermann FH JOANNEUM Chemnitzer Linuxtage 2011

Das CMake-Buildsystem Programmentwicklung leichtgemacht

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Das CMake-Buildsystem Programmentwicklung leichtgemacht

Das CMake-Buildsystem ndash Programmentwicklungleichtgemacht

Wolfgang Dautermann

FH JOANNEUM

Chemnitzer Linuxtage 2011

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

1 Einleitung

2 Hello World Beispiel

3 CMake Syntax und Features

4 Pakete finden

5 CPack - Paketieren von Software

6 CTest amp CDash

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Was ist CMakeWelcome to CMake the cross-platform open-source build system

Zitat von der CMake-HomepageCMake is a family of tools designed to build test and packagesoftware CMake is used to control the software compilation processusing simple platform and compiler independent configuration filesCMake generates native makefiles and workspaces that can beused in the compiler environment of your choice

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Wer verwendet CMakeBekannte Projekte mit CMake als Buildsystem

Insight Segmentation and Registration Toolkit (ITK)

KDE (ab Version 4)

Mysql

Second Life

Scribus

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World BeispielWir compilieren amp installieren ein einfaches C-Programm

CMakeListstxt

cmake_minimum_required(VERSION 28)PROJECT(helloworld)SET(hello_SRCS helloworldc)ADD_EXECUTABLE(helloworld $hello_SRCS )INSTALL(TARGETS helloworld RUNTIME DESTINATION bin)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 2: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

1 Einleitung

2 Hello World Beispiel

3 CMake Syntax und Features

4 Pakete finden

5 CPack - Paketieren von Software

6 CTest amp CDash

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Was ist CMakeWelcome to CMake the cross-platform open-source build system

Zitat von der CMake-HomepageCMake is a family of tools designed to build test and packagesoftware CMake is used to control the software compilation processusing simple platform and compiler independent configuration filesCMake generates native makefiles and workspaces that can beused in the compiler environment of your choice

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Wer verwendet CMakeBekannte Projekte mit CMake als Buildsystem

Insight Segmentation and Registration Toolkit (ITK)

KDE (ab Version 4)

Mysql

Second Life

Scribus

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World BeispielWir compilieren amp installieren ein einfaches C-Programm

CMakeListstxt

cmake_minimum_required(VERSION 28)PROJECT(helloworld)SET(hello_SRCS helloworldc)ADD_EXECUTABLE(helloworld $hello_SRCS )INSTALL(TARGETS helloworld RUNTIME DESTINATION bin)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 3: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Was ist CMakeWelcome to CMake the cross-platform open-source build system

Zitat von der CMake-HomepageCMake is a family of tools designed to build test and packagesoftware CMake is used to control the software compilation processusing simple platform and compiler independent configuration filesCMake generates native makefiles and workspaces that can beused in the compiler environment of your choice

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Wer verwendet CMakeBekannte Projekte mit CMake als Buildsystem

Insight Segmentation and Registration Toolkit (ITK)

KDE (ab Version 4)

Mysql

Second Life

Scribus

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World BeispielWir compilieren amp installieren ein einfaches C-Programm

CMakeListstxt

cmake_minimum_required(VERSION 28)PROJECT(helloworld)SET(hello_SRCS helloworldc)ADD_EXECUTABLE(helloworld $hello_SRCS )INSTALL(TARGETS helloworld RUNTIME DESTINATION bin)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 4: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Wer verwendet CMakeBekannte Projekte mit CMake als Buildsystem

Insight Segmentation and Registration Toolkit (ITK)

KDE (ab Version 4)

Mysql

Second Life

Scribus

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World BeispielWir compilieren amp installieren ein einfaches C-Programm

CMakeListstxt

cmake_minimum_required(VERSION 28)PROJECT(helloworld)SET(hello_SRCS helloworldc)ADD_EXECUTABLE(helloworld $hello_SRCS )INSTALL(TARGETS helloworld RUNTIME DESTINATION bin)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 5: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World BeispielWir compilieren amp installieren ein einfaches C-Programm

CMakeListstxt

cmake_minimum_required(VERSION 28)PROJECT(helloworld)SET(hello_SRCS helloworldc)ADD_EXECUTABLE(helloworld $hello_SRCS )INSTALL(TARGETS helloworld RUNTIME DESTINATION bin)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 6: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

In-Source vs Out-of-source BuildWo kommen generierte Dateien (Objectfiles Executables ) hin

In-Source Sourcecode und generierte Dateien (ObjectfilesExecutables ) sind im selben DirectoryAufraumlumen (make clean make distclean) notwendigOut-of-Source Build-Directory 6= Sourcecode-Directory

Von CMake supported(sehr) empfohlenSourcecodedirectory wird nicht verschmutztAlle Dateien werden in einem seperaten Build-Directory erzeugtmake clean rm -rf im Build-directoryVerschiedene Builds (Debug Release ) gleichzeitig moumlglich

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 7: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Hello-World Beispiel ndash CompilierenAufruf von cmake

~helloworld -build gt cmake helloworld-- The C compiler identification is GNU-- The CXX compiler identification is GNU-- Check for working C compiler usrbingcc[]-- Configuring done-- Generating done-- Build files have been written to []~helloworld -build gt make [VERBOSE =1]~helloworld -build gt make install als root

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 8: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake GUI

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 9: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake unter WindowsErzeugung von Visual-Basic-Projekten

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 10: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMakeCachetxt

Daten die beim Konfigurationslauf gefunden werden (oder zB auf derKommandozeile angegeben werden) kommen in den CMakeCachetxtndash eine Art KonfigurationsfileSie koumlnnen dort ggf noch geaumlndert werden (Texteditor odermake edit_cache)Wenn CMakeListstxt geaumlndert wird sollte man den Cache loumlschenund neu aufbauen lassen

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 11: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und FeaturesVariablen (Case-sensitive X ltgt x)

Variablen setzen

SET (var wert)SET (var ac bc cc) var=acbccc (Liste)SET (var helloc worldc) var= helloc worldc

Variablen koumlnnen beim cmake-Aufruf gesetzt werden

cmake -Dvar=wert

File globbing

FILE(GLOB helloworld_sources c )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 12: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CMake Syntax und Features

CMakeListstxt in Subdirectories verarbeiten

ADD_SUBDIRECTORY(dirname)

gesetzte Variablen werden vererbt

In jedem Directory eine eigene Datei CMakeListstxt

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 13: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

ifthenelsea

aNuumltzliche Beispiele if(APPLE) if(WIN32) IF(UNIX) IF(WIN32 AND NOT UNIX)

IF(expression)ELSE(expression)ENDIF(expression)

Eine Variable gilt als Wahr wenn der Variablenwert nicht leer 0 N NO OFFFALSE NOTFOUND oder ltvariablegt-NOTFOUND ist

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 14: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Kontrollstrukturen

Listen verarbeiten

FOREACH(loop_var Liste)ENDFOREACH(loop_var Liste)

while()-Schleifen

WHILE(bedingung)ENDWHILE(bedingung)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 15: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Compilieren Programme und Libraries

Programme

add_executable( ltname gt sourcefiles)

add_library(ltname gt [( STATIC) | SHARED ] sourcefiles)

Den Namen ohne OS-spezifische PreSuffixes (ltnamegtexe ltnamegtdlllibltnamegtso libltnamegta ) angeben ndash wird automatisch ergaumlnzt (und istdadurch plattformunabhaumlngig)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 16: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete findenich mag nicht alles selber machen

Pakete finden

find_package(ltname gt [REQUIRED ])

Bei Bibliotheken werden die folgenden Variablen gesetzt ltnamegt_FOUNDltnamegt_LIBRARIES1 ltnamegt_INCLUDE_DIR2(Ev auch noch weitere cmake --help-module Findltnamegt)

1manchmal auch ltnamegt_LIBRARY oder ltnamegt_LIBS2manchmal auch ltnamegt_INCLUDES

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 17: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Pakete verwenden

Include-Pfad ergaumlnzen

include_directories($ltname gt_INCLUDE_DIRS )

Bibliothek linken

target_link_libraries(targetname $ltname gt_LIBRARIES )

Ggf Compilerdefinitionen ergaumlnzen (zB libPNG)

add_definitions($ltname gt_DEFINITIONS )

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 18: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Software konfigurieren

Konfigurieren eines Templatefiles

configure_file(ltinput gt ltoutput gt)

Variablen $VAR oder VAR werden durch ihre Werte ersetzt

cmakedefine VAR wird ersetzt durch define VAR bzw undef VAR

cmakedefine01 VAR wird ersetzt durch define VAR 1 bzwdefine VAR 0

Nuumltzlich um Headerfiles zu konfigurieren abhaumlngig davon ob Paketegefunden wurden oder nicht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 19: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Installationen

Targets installieren

install(TARGETS myExe mySharedLib myStaticLibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE DESTINATION libstatic)

Files installieren

install(FILES files DESTINATION ltdir gt)install(DIRECTORY dir DESTINATION ltdir gt)

Installationspraumlfix angeben mit -DCMAKE_INSTALL_PREFIXPATH=mypath

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 20: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Cpack - Paketieren von Software

CMake inkludiert CPack mit dem man Installationspakete in verschiedenenFormaten erstellen kann zB

Welche Pakete sollen erstellt werden

IF (UNIX)SET(CPACK_SOURCE_GENERATOR TGZTBZ2)SET(CPACK_GENERATOR TGZTBZ2DEBRPM)

ELSE(UNIX)SET(CPACK_SOURCE_GENERATOR ZIP)SET(CPACK_GENERATOR NSIS)

ENDIF(UNIX)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 21: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CPack - Paketieren von SoftwareMetadaten festlegen (es gibt noch wesentlich mehr )

div Metadaten festlegenSET(CPACK_PACKAGE_DESCRIPTION_SUMMARY

Description of Helloworld )SET(CPACK_PACKAGE_VENDOR The Helloworld Team)SET(CPACK_PACKAGE_DESCRIPTION_FILE

$CMAKE_CURRENT_SOURCE_DIR readmetxt)SET(CPACK_RESOURCE_FILE_LICENSE

$CMAKE_CURRENT_SOURCE_DIR licensetxt)SET(CPACK_PACKAGE_VERSION_MAJOR 0)SET(CPACK_PACKAGE_VERSION_MINOR 1)SET(CPACK_PACKAGE_CONTACT

Helloworld Team lthelloworldteamexampleorg gt)SET(CPACK_PACKAGE_SECTION games )INCLUDE(CPack)

make package bzw make package_source erstellt dann die Pakete (LiveDemo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 22: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

CTest - Testen von Softwareermoumlglicht automatierte Tests

ENABLE_TESTING() und ADD_TEST()

ENABLE_TESTING ()ADD_TEST(Testname1

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])ADD_TEST(Testname2

$EXECUTABLE_OUTPUT_PATH ltname gt [argumente ])[]

make test startet dann die Tests (Live-Demo)

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 23: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Links und weiterfuumlhrende Infos

httpwwwcmakeorg

httpwwwcmakeorgWikiCMake

inkludierte Hilfe

man cmakecmake --help

--help -full--help -command cmd--help -module module[]

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash
Page 24: Das CMake-Buildsystem Programmentwicklung leichtgemacht

wwwfh-joanneumatFAHRZEUGTECHNIK

AUTOMOTIVE ENGINEERING amp RAILWAY ENGINEERING

Fragen Feedback

Vielen Dank fuumlr Ihre AufmerksamkeitWolfgang Dautermann

wolfgangdautermann [AT] fh-joanneumat

  • Einleitung
  • Hello World Beispiel
  • CMake Syntax und Features
  • Pakete finden
  • CPack - Paketieren von Software
  • CTest amp CDash