Aller au contenu

CMake

CMake est une alternative à make qui est plus automatisée.

Le programme est installé sur les machines Linux, cependant il est possible que la version locale ne soit pas adéquate. À ce moment, vous pouvez regarder dans les modules et utiliser une autre version.

Un des problèmes avec CMake est lié à l'utilisation d'un compilateur qui n'est pas celui par défaut. Comme le système est automatisé, il a un ensemble de règles et il y a un certain ordre pour chercher ou est le compilateur. À cause de cela, si vous utilisez un module pour gcc par exemple, il ne trouves pas la version qui est chargée, seulement celle du système ce qui amène généralement des problèmes.

Pour contourner cette déficience, vous pouvez utiliser les variables CC et CXX pour spécifier le compilateur à utiliser. CC est pour les programmes en C et CXX pour les programmes C++. On peut aussi utiliser les paramètres de CMAKE.

Si vous avez déjà fait une configuration CMake et qu'il n'a pas pris en charge le bon compilateur, vous devrez supprimer le répertoire de build et recommencer avec les variables d'environnement bien définies.

Donc dans l'ensemble, la procédure pourrait ressembler à ceci, ici on utilise les paramètres CMAKE plutôt que les variables d'environnement:

cd projet1
module load cmake
module load gcc
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
make

Voici un exemple de fichier CMakeLists.txt pour un programme C++ utilisant Cplex avec concert. N'oubliez pas de charger le module cplex-studio avant de faire la configuration cmake.

cmake_minimum_required(VERSION 3.15)
project(Projet1)
set(CPLEX_LIBRARIES ilocplex concert cplex)
set(SYSTEM_LIBRARIES m pthread dl)

add_compile_options(-Wall -DNDEBUG -DIL_STD)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(cutstock cutstock.cpp)
target_link_libraries(cutstock PRIVATE ${CPLEX_LIBRARIES} ${SYSTEM_LIBRARIES})

Voici un autre exemple avec gurobi.

cmake_minimum_required(VERSION 3.15)
project(Projet1)
set(GUROBI_LIBRARIES gurobi_g++5.2 gurobi100)

add_compile_options(-Wall)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(sudoku sudoku.cpp)
target_link_libraries(sudoku PRIVATE ${GUROBI_LIBRARIES})