Depuis CMake 3.2, il est possible de forcer l’usage du standard c++11 (cf. Craig Scott’s blog post pour plus de détails). Jusqu’à présent, dans dtk, nous étions obligés de tester l’architecture (Apple, Unix or Windows), puis de vérifier si le compilateur supportait le c++11 et enfin nous devions fixer les flags correspondants manuellement.
Ancienne méthode
Voici l’extrait de code cmake utilisé jusqu’ici dans dtk:
if(APPLE)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -I/usr/lib/c++/v1")
endif(APPLE)
if(NOT APPLE AND NOT MSVC)
  include(CheckCXXCompilerFlag)
  CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
  CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  endif()
else(NOT APPLE AND NOT MSVC)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif(NOT APPLE AND NOT MSVC)On s’aperçoit aisément combien ce code est pénible et peu lisible.
Nouvelle approche
Désormais, il suffit de fixer deux variables CMake pour forcer l’usage du c++11:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)Bien plus simple n’est-ce pas?
CMake fournit d’autres commandes pour utiliser plus finement les différentes fonctionalités du compilateur. Craig Scott les détaille très clairement dans son blog post.

