2015年2月2日月曜日

cmakeの文字列と変数の癖のある挙動

以下のcmakeコードは変数が与えられる際には問題なく、CMAKE_BUILD_TYPEを小文字にしてLOWER_CASED_CMAKE_BUILD_TYPEへ入れてくれる。
string(TOLOWER ${CMAKE_BUILD_TYPE} LOWER_CASED_CMAKE_BUILD_TYPE)
ところが、これは次のエラーとなる場合がある。
cmake string no output variable specified
これはcmakeのドキュメントのstringを確認しても原因や解決方法には辿りつけない。
CMAKE_BUILD_TYPEが空だった場合や、あるいは、
また別の問題だけど、CMAKE_CXX_COMPILER_IDMSVCという文字列と比較したい場合などに生じるこの手の問題はトリックのような回避方法を取る必要がある。
さしあたり、先のある変数の文字列を小文字にしたい場合は次のようにすると良い。
string(TOLOWER "x${CMAKE_BUILD_TYPE}" LOWER_CASED_CMAKE_BUILD_TYPE)
当然、このあとにifなどしたければ、
if(NOT LOWER_CASED_CMAKE_BUILD_TYPE STREQUAL "xrelease" )
こんなような具合。
MSVCが使えない問題の方は、
  if(NOT "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
こんな具合。なんともcmakeの美しくないところです。
参考: http://www.cmake.org/pipermail/cmake-developers/2014-November/023701.html

0 件のコメント:

コメントを投稿