# Nous voulons un cmake "récent" pour utiliser les dernières fonctionnalités. cmake_minimum_required(VERSION 3.20) # Nom du projet. set(ORDO OrdonnancementCorrectif) set(INSGEN InstanceGenerator) set(TESTS Tests) project(${ORDO}) # Génération de la liste des fichiers sources. file(GLOB_RECURSE SRCS_Ordo src/OrdoCorr/main.cpp ) file(GLOB_RECURSE SRCS_Insgen src/InstanceGenerator/main.cpp ) file(GLOB_RECURSE SRCS_Gen src/InstanceGenerator/Generator/* ) file(GLOB_RECURSE SRCS_Interface src/OrdoCorr/Interface/* ) file(GLOB_RECURSE SRCS_Solver src/OrdoCorr/Solver/* ) file(GLOB_RECURSE SRCS_Config src/General/Configuration/* ) file(GLOB_RECURSE SRCS_Model src/General/Model/* ) file(GLOB_RECURSE SRCS_Logs src/General/Logs/* ) file(GLOB_RECURSE SRCS_Tester src/OrdoCorr/Tester/* ) # --------------------------------------- # ------- Inclusion de JSONfMC++ -------- # JSONfMC++ Lib pour gestion fichier JSON, en mode header only. if(WIN32) set(JSONlib_DIR ./lib/CMake/Windows) else() set(JSONlib_DIR ./lib/CMake/Linux) endif() find_package(JSONlib REQUIRED) if(JSONlib_FOUND) message("lib JSONFMC++ Trouvé") else() message("lib JSONFMC++ Introuvable") endif() # --------------------------------------- # ------- Inclusion de Boost Graph Library -------- # Boost Graph Library pour gestion des graphes en mode header only. if(WIN32) set(BOOSTGRAPHlib_DIR ./lib/CMake/Windows) else() set(BOOSTGRAPHlib_DIR ./lib/CMake/Linux) endif() find_package(BOOSTGRAPHlib REQUIRED) if(BOOSTGRAPHlib_FOUND) message("lib Boost Graph Trouvé") else() message("lib Boost Graph Introuvable") endif() # --------------------------------------- # ------- Inclusion de httplib -------- # httplib Lib pour gestion des requetes web en mode header only. if(WIN32) set(HTTPlib_DIR ./lib/CMake/Windows) else() set(HTTPlib_DIR ./lib/CMake/Linux) endif() find_package(HTTPlib REQUIRED) if(HTTPlib_FOUND) message("lib HTTP Trouvé") else() message("lib HTTP Introuvable") endif() # --------------------------------------- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/CMake/Linux/") find_package(GUROBI REQUIRED) set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS "Debug") # Chemin executable set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin/${CMAKE_BUILD_TYPE}") # On indique que l'on veut un exécutable nommé PROJECT compilé à partir des fichiers décrits par les variables SRCS et HEADERS. add_executable(${ORDO} ${SRCS_Ordo}) add_executable(${INSGEN} ${SRCS_Insgen}) add_library(Interface STATIC ${SRCS_Interface}) add_library(Data STATIC ${SRCS_Model}) add_library(Solver STATIC ${SRCS_Solver}) add_library(Configuration STATIC ${SRCS_Config}) add_library(Logs STATIC ${SRCS_Logs}) add_library(Generator STATIC ${SRCS_Gen}) add_library(Tester STATIC ${SRCS_Tester}) add_dependencies(${ORDO} Interface Configuration Logs Data Solver Tester) add_dependencies(Interface Configuration Logs Data Solver Tester) add_dependencies(Solver Logs Configuration Data) add_dependencies(Data Logs Configuration) add_dependencies(Tester Solver Data Logs Configuration) add_dependencies(${INSGEN} Data Logs Generator) set_property(TARGET ${ORDO} PROPERTY CXX_STANDARD 17) set_property(TARGET Interface PROPERTY CXX_STANDARD 17) set_property(TARGET Data PROPERTY CXX_STANDARD 17) set_property(TARGET Solver PROPERTY CXX_STANDARD 17) set_property(TARGET Configuration PROPERTY CXX_STANDARD 17) set_property(TARGET Logs PROPERTY CXX_STANDARD 17) set_property(TARGET Tester PROPERTY CXX_STANDARD 17) set_property(TARGET ${INSGEN} PROPERTY CXX_STANDARD 17) set_property(TARGET Generator PROPERTY CXX_STANDARD 17) # Fichier include # CPLEX # JSONFMCPP include_directories(${JSONFMCPP_INCLUDE_DIRS}) include_directories(${HTTPLIB_INCLUDE_DIRS}) include_directories(${BOOSTGRAPH_INCLUDE_DIRS}) #cppunit include_directories(${GUROBI_INCLUDE_DIRS}) # Fichier lib target_link_libraries(${ORDO} debug Interface optimized Interface ) target_link_libraries(${INSGEN} debug Generator optimized Generator ) target_link_libraries(Interface debug Solver optimized Solver debug Tester optimized Tester ) target_link_libraries(Generator debug Data optimized Data ) target_link_libraries(Solver debug ${CMAKE_DL_LIBS} optimized ${CMAKE_DL_LIBS} optimized ${GUROBI_CXX_LIBRARY} debug ${GUROBI_CXX_DEBUG_LIBRARY} optimized ${GUROBI_LIBRARY} debug ${GUROBI_LIBRARY} debug Data optimized Data ) target_link_libraries(Tester debug Solver optimized Solver ) target_link_libraries(Data debug Configuration optimized Configuration debug Logs optimized Logs ) # Fichier dll sous windows if(WIN32) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) endif() # Paramètre de compilation if (UNIX) set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_CXX_FLAGS "-Wall -Wno-deprecated -Wno-write-strings -Wno-maybe-uninitialized -pthread") endif () foreach(source IN LISTS SRCS_Ordo) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Interface) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Solver) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Config) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Model) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Logs) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Insgen) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Gen) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() foreach(source IN LISTS SRCS_Tester) get_filename_component(source_path "${source}" PATH) STRING(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" source_path ${source_path}) string(REPLACE "/" "\\" source_path_msvc "${source_path}") source_group("${source_path_msvc}" FILES "${source}") endforeach() message(STATUS "Tree reorganized")