コンパイラが C++11 をサポートしているかどうかを CMake が自動的に検出できるようにする方法はありますか?
コンパイラが C++11 をサポートしていないため、CMake の実行中にコードがコンパイルされないことをユーザーに通知するとよいでしょう。現時点では、C++11 フラグを設定しています。ただし、コンパイラがサポートしていない場合、ユーザーは CMake の実行中にエラーではなくコンパイル エラーを受け取ります。
のように機能するものは完璧find_package()
です。ただし、必要な機能を提供するモジュールまたは関数は見つかりませんでした。
std=c++0x
さらに、コンパイラがフラグまたはフラグを必要とするかどうかを検出する機能があると便利ですstd=c++11
。
利用可能なものはありますか、それとも自分で開発する必要がありますか?
以下は、これまでに使用したコードの一部ですが、GNU'c GCC コンパイラでのみ機能します。より一般的な解決策があればいいのですが。
if(CMAKE_COMPILER_IS_GNUCXX)
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
message(STATUS "C++11 activated.")
add_definitions("-std=gnu++11")
elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3)
message(WARNING "C++0x activated. If you get any errors update to a compiler which fully supports C++11")
add_definitions("-std=gnu++0x")
else ()
message(FATAL_ERROR "C++11 needed. Therefore a gcc compiler with a version higher than 4.3 is needed.")
endif()
else(CMAKE_COMPILER_IS_GNUCXX)
add_definitions("-std=c++0x")
endif(CMAKE_COMPILER_IS_GNUCXX)