Files
OrdonnancementCorrectif/CMakeLists.txt
T
2026-06-03 22:48:34 +02:00

299 lines
8.0 KiB
CMake

# 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")