Cours Cmake Ctest
Cours Cmake Ctest
Cours Cmake Ctest
Anne Cadiou
1 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
2 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
3 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
4 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
CTest/Boost
5 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Rfrences
Kitware
http://www.cdash.org/
https://cmake.org/Wiki/CMake
Professional Training Courses, Kitware Lyon
Livre
K. Martin, B. Hoffman, "Mastering CMake" book, Kitware ed.
Liste de discussion
https://cmake.org/mailing-lists/
nombreuses ressources en ligne, par exemple
https://github.com/TheErk/CMake-tutorial
http://sirien.metz.supelec.fr/depot/SIR/TutorielCMake/index.html
6 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Autres outils
7 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
8 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Projet simple
Structure du projet
project/
src/
prog.cpp
9 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Compilation manuelle
Gnration de lexcutable
cadiou@moon :~/ project / src$ ls
cadiou@moon :~/ project / src$ a . out prog . cpp
cadiou@moon :~/ project / src$ ./ a . out
Hello , world !
10 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
project/
src/
prog.cpp
Makefile
bin/
11 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Exemple de Makefile
CC = g ++
CLINKER = g ++
OBJS = prog . o
. SUFFIXES : . o . cpp
. cpp . o :
$ ( CC ) -c $ ( CCLAGS ) $ <
EXE = a . out
all : $ ( EXE )
$ ( EXE ) : $ ( OBJS )
$ ( CLINKER ) $ ( LDFLAGS ) -o $@ $ ( OBJS )
clean :
rm -f $ ( OBJS ) $ ( EXE )
install :
mv $ ( EXE ) ../ bin /.
12 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
# cmake version
c m a k e _ m i n i m u m _ r e q u i r e d ( VERSION 2.8.10 FATAL_ERROR )
# define directories
set ( SRC $ { C M A KE _ S O U R C E _ D I R }/ src )
a d d _ s u bd i r e c t or y ( $ { SRC })
14 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
15 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Make
main . o : main . c main . h
< TAB > cc -c main . c
MyProgram : main . o
< TAB > cc -o MyProgram main . o - lm - lz
CMake
PROJECT ( MyProject C )
ADD_E XECUTABL E ( MyProgram main . c )
T A R G E T _ L I N K _ L I B R A R I E S ( MyProgram z m )
16 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
17 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
18 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
19 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Projet parallle
Programme appelant la bibliothque MPI
1 # include < mpi .h >
2 # include < iostream >
3
4 int main ( int argc , char * argv [])
5 {
6 MPI :: Init ( argc , argv ) ;
7
8 int rank = MPI :: COMM_WORLD . Get_rank () ;
9 int size = MPI :: COMM_WORLD . Get_size () ;
10
11 std :: cout << " Process " << rank << " / " << size << " says
Hello , world ! \ n " ;
12
13 MPI :: Finalize () ;
14 return 0;
15 }
20 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Compilation manuelle
Gnration de lexcutable
cadiou@moon :~/ project / src$ ls
cadiou@moon :~/ project / src$ a . out prog . cpp
cadiou@moon :~/ project / src$ ./ a . out
cadiou@moon :~/ project / src$ mpirun - np 4 a . out
Process 1/4 says Hello , world !
Process 2/4 says Hello , world !
Process 3/4 says Hello , world !
Process 0/4 says Hello , world !
21 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
project/
src/
prog.cpp
Makefile
bin/
22 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Exemple de Makefile
. SUFFIXES :
. SUFFIXES : . cpp . o
CXX = mpicxx
CXXFLAGS =
LDFLAGS = - lmpi
EXE = a . out
SRC = \
prog . cpp
OBJ = $ ( SRC :. cpp =. o )
. cpp . o :
$ ( CXX ) $ ( CXXFLAGS ) -c $ <
all : $ ( EXE )
$ ( EXE ) : $ ( OBJ )
$ ( CXX ) -o $@ $ ^ $ ( LDFLAGS )
clean :
rm -f $ ( OBJ ) $ ( EXE ) core
install :
mv $ ( EXE ) ../ bin /.
23 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
# cmake version
c m a k e _ m i n i m u m _ r e q u i r e d ( VERSION 2.8.10 FATAL_ERROR )
# MPI
find_package ( MPI REQUIRED )
i n c l u d e _ d i r e c t o r i e s ( $ { M P I_ I N C L U D E _ P A T H })
set ( INCLUDE $ { M P I _ I N C L U D E _ P A T H })
# define directories
set ( SRC $ { C M A KE _ S O U R C E _ D I R }/ src )
a d d _ s u bd i r e c t or y ( $ { SRC })
25 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
26 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Syntaxe
Configuration dynamique
conf igure_fil e ( config . h . in config . h )
Dtection de bibliothque
find_package ( BZip2 )
if ( BZIP2_FOUND )
i n c l u d e _ d i r e c t o r i e s ( $ { B Z I P _ I N C L U D E _ D I R S })
t a r g e t _ l i n k _ l i b r a r i e s ( $ { PROJET } $ { BZ IP 2_ LI B RA RI ES })
endif ( BZIP2_FOUND )
find_package ( Doxygen )
find_program ( DOXYPY doxypy )
if ( DOXYGEN_FOUND )
a d d _ s u b d i r e ct o r y ( doc )
endif ( DOXYGEN_FOUND )
27 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
28 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Lancement de CMake
29 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
30 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
[c]
31 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
[ c ] [ g ] make
32 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
33 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
[c]
34 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
35 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
[ c ] [ g ] make
36 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
37 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
[ c ] [ g ] make
38 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
project/build/
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
Makefile
src/
CMakeFiles/
cmake_install.cmake
Makefile
39 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Aperu du CMakeCache.txt
########################
# EXTERNAL cache entries
########################
// CXX compiler .
C M A K E _ CX X _ C O M P I L E R : FILEPATH =/ usr / bin / c ++
Rpertoire dinstallation
C M A K E _ I N S T A L L _ P R E F I X =[/ usr / local , C :\ Program Files ]
Visualisation du Makefile
C M A K E _ V E R B O S E _ M A K E F I L E = ON
41 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
if ( DEFINED C M A K E _ B U I L D _ T Y P E )
set ( CM A K E _ B U I L D _ T YP E $ { C M A K E _ B U I L D _ T Y P E } CACHE STRING "
Choose the type of build , options are : None Debug
Release RelW ithDebIn fo MinSizeRel .")
else ()
set ( CM A K E _ B U I L D _ T YP E Debug CACHE STRING " Choose the type
of build , options are : None Debug Release Rel WithDebI nfo
MinSizeRel .")
endif ()
# define directories
set ( SRC $ { C M A KE _ S O U R C E _ D I R }/ src )
a d d _ s u bd i r e c t or y ( $ { SRC })
42 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Action...
cadiou@moon :~/ project / build$ ccmake ..
43 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
44 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Par dfaut
C M A K E _ I N S T A L L _ P R E F I X =/ usr / local
45 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Action...
cadiou@moon :~/ project / build$ ccmake ..
46 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
47 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
48 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
49 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Compilation conditionnelle
50 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Compilation manuelle
51 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
avec CMake
Ajouter un test
# parameters
include ( CMakeFunction . txt )
option ( MULTI_LANG " Multiple language " OFF )
set ( LanguageVal ues " anglais ")
if ( MULTI_LANG )
set ( Lan guageVal ues " anglais ; turc ; neerlandais " CACHE STRING
" List of possible languages ")
choice ( Language " $ { La nguageVa lues }" " Language chosen by
the user at
CMake configure time ")
endif ()
message ( STATUS " Language = $ { Language } ")
52 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
53 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Exemple
cadiou@moon :~/ project / build$ ccmake ..
54 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
55 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
56 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
57 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
58 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
59 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Remarques
60 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
61 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
CTest
62 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Syntaxe
Se rajoute aisment au fichier CMakeLists.txt
ENABL E_TESTIN G ()
project/
src/
prog.cpp
test/
prog_syntaxe.cpp
ref_test_uk.log
test_uk.sh
63 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Exemple
Modification du code :
1 # include < iostream >
2
3 int main ()
4 {
5 std :: cout << " Hello , word !\ n " ;
6 }
64 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
# cmake version
c m a k e _ m i n i m u m _ r e q u i r e d ( VERSION 2.8.10 FATAL_ERROR )
# define directories
set ( SRC $ { C M A KE _ S O U R C E _ D I R }/ src )
set ( TESTS $ { C M A K E _ S O U R C E _ DI R }/ test )
a d d _ s u bd i r e c t or y ( $ { SRC })
a d d _ s u bd i r e c t or y ( $ { TESTS })
65 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
66 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
67 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
# add test
a d d _ c u st o m _ t a r g e t ( test_uk . sh ALL DEPENDS $ { file_dest })
68 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
CMake/CTest
69 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
70 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
71 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
73 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Remarques
74 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
1 Contexte
2 Exemple simple
4 Paramtres
5 CTest
6 Conclusion
75 / 76
Contexte Exemple simple Exemple avec lien Paramtres CTest Conclusion
Conclusion
76 / 76