in Cmake
OPTION(OpenMVG_USE_LOG "Enable logger" ON)
# a variable to set the type of logger to use
set(OpenMVG_LOGGER "LOG_COUT" CACHE STRING "The logger to use for openMVG"))
set(LOGGERS_Values "LOG_COUT;LOG_BOOST;LOG_GLOG" CACHE INTERNAL "List of possible values for the OpenMVG_LOGGER cache variable”)
set_property(CACHE OpenMVG_LOGGER PROPERTY STRINGS ${LOGGERS_Values})
...
IF(OpenMVG_USE_BOOST)
if(OpenMVG_LOGGER STREQUAL "LOG_BOOST")
FIND_PACKAGE(Boost 1.53.0 QUIET COMPONENTS system filesystem program_options thread serialization log log_setup)
else()
FIND_PACKAGE(Boost 1.53.0 QUIET COMPONENTS system filesystem program_options thread serialization)
endif()
#maybe we can switch to REQUIRED, at least the user see that something is wrong...
IF(Boost_FOUND)
..
else()
#fallback to cout
set(OpenMVG_LOGGER "cout")
..
endif()
endif()
#the same for GLog
if(OpenMVG_LOGGER STREQUAL "LOG_GLOG")
find_package(Glog REQUIRED)
...
endif()
IF(OpenMVG_USE_LOG)
ADD_DEFINITIONS(-DWANTS_OPENMVG_COUT)
ADD_DEFINITIONS(-D${OpenMVG_LOGGER})
ENDIF()
Apres dans le logger.h
#ifdef WANTS_OPENMVG_COUT
#ifdef LOG_BOOST
#define BOOST_LOG_DYN_LINK 1
#include <boost/log/trivial.hpp>
#define OPENMVG_LOG_TRACE_OBJ BOOST_LOG_TRIVIAL(trace)
...
#elif defined(LOG_GLOG)
#include <glog.hpp>
#define OPENMVG_LOG_TRACE_OBJ GLOG_LOG_TRIVIAL(trace)
...
#else //cout
#define OPENMVG_LOG_TRACE_OBJ std::cout
...
#endif
#define OPENMVG_LOG(MODE, ...) MODE << __VA_ARGS__
#else
#define OPENMVG_LOG_TRACE_OBJ std::stringstream
...
#endif