cmake est un outil multi-plateforme pour générer un makefile adapté a votre système .
CMakeLists.txt
qui va décrire le projet
bruno@elliott:~/Works/bonjour$ cmake -G
CMake Error: No generator specified for -G
Generators
Green Hills MULTI = Generates Green Hills MULTI files
(experimental, work-in-progress).
* Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files.
Ninja Multi-Config = Generates build-<Config>.ninja files.
Watcom WMake = Generates Watcom WMake makefiles.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
CodeLite - Ninja = Generates CodeLite project files.
CodeLite - Unix Makefiles = Generates CodeLite project files.
Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
Kate - Ninja = Generates Kate project files.
Kate - Unix Makefiles = Generates Kate project files.
Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles
= Generates Sublime Text 2 project files.
on part d'un répertoire bonjour
dans lequel on a bonjour.c
bruno@elliott:~/Works$ tree bonjour/
bonjour/
└── bonjour.c
1 directory, 1 file
bruno@elliott:~/Works$
bonjour.c:
/****************************************/
/* Projet bonjour */
/* 13/10/2023 */
/* Bogt 2023 */
/****************************************/
#include <stdlib.h>
#include <stdio.h>
int main(int argc,char **argv)
{
printf("Bonjour le monde \n");
return EXIT_SUCCESS;
}
CMakeLists.txt:
# Nous voulons un cmake "récent" pour utiliser les dernières fonctionnalités
cmake_minimum_required(VERSION 3.0)
# Notre projet est étiqueté hello
project(hello)
# Crée des variables avec les fichiers à compiler
set(SRCS
bonjour.c
)
# Si on des headers
# set(HEADERS
# hello.h
# )
# On indique que l'on veut un exécutable "hello" compilé à partir des fichiers décrits par les variables SRCS et HEADERS
add_executable(bonjour ${SRCS} ${HEADERS})
bruno@elliott:~/Works$ tree bonjour/
bonjour/
├── bonjour.c
└── CMakeLists.txt
1 directory, 2 files
cmake -G "Unix Makefiles" .
bruno@elliott:~/Works/bonjour$ ls
bonjour.c CMakeLists.txt
bruno@elliott:~/Works/bonjour$ cmake .
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bruno/Works/bonjour
bruno@elliott:~/Works/bonjour$
on obtient le Makefile en question:
bruno@elliott:~/Works/bonjour$ ls
bonjour.c CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt Makefile