空飛ぶ気まぐれ雑記帳

主に趣味とかプログラミングについて扱います。

Visual Studioユーザーに送るCMakeテクニック☆ (2)

Visual Studioユーザーに送るCMakeテクニック☆ 、第二回目です。
今回は、昨日の記事で説明したフィルタリング機能を使って、CMakeファイルをVisualStudioから簡単に見えるようにしようって話です。
具体的にはどういうことかと言うと下記のように各ディレクトリに配置されているCMakeListsと*.cmakeファイルをディレクトリ構造をフィルタ名としたCustomプロジェクトを作成します。

f:id:elda27:20161130000643p:plain

下記が実際のソースコードです。

FILE(GLOB_RECURSE CMAKE_LIST_FILES CMakeLists.txt *.cmake)

FOREACH(file ${CMAKE_LIST_FILES})
  FOREACH(dir ${CMAKE_CURRENT_LIST_DIR})
    FILE(RELATIVE_PATH relative ${CMAKE_CURRENT_LIST_DIR} ${file})
    
    STRING(REGEX MATCHALL "[^/]+" filters "${relative}")
    LIST(LENGTH filters output_length)
    MATH(EXPR iteration "${output_length} - 2")
    
    IF(${iteration} LESS 0)
      continue()
    ENDIF()
    
    SET(group_string "")
    FOREACH(i RANGE 0 ${iteration})
      LIST(GET filters ${i} g)    
      set(group_string "${group_string}\\${g}")
      #MESSAGE(${i},${output_length}:${g})
    ENDFOREACH()
    SOURCE_GROUP("${group_string}" FILES ${file})
  ENDFOREACH()
ENDFOREACH()

ADD_CUSTOM_TARGET(CMakeLists SOURCES ${CMAKE_LIST_FILES})
<||