23

コードカバレッジを対象とした、cmakeビルドのカスタムビルドタイプを追加しようとしています。

私はそれについてのFAQエントリを見つけました:https ://gitlab.kitware.com/cmake/community/wikis/FAQ#how-can-i-specify-my-own-configurations-for-generators-that-allow-それ-

しかし、私はそれを機能させることができません。

これがcmake2.8.5を使用した私のコードです:

message("* Adding build types...")
if(CMAKE_CONFIGURATION_TYPES)
   list(APPEND CMAKE_CONFIGURATION_TYPES CodeCoverage)
   list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
   set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
       "Add the configurations that we need"
       FORCE)
   message("  Available build types are now : ${CMAKE_CONFIGURATION_TYPES}")
else()
   message("  XXX custom build types are not allowed...")
endif()

そして、「XXXカスタムビルドタイプは許可されていません...」と表示されます...

4

1 に答える 1

27

問題が見つかりました:カスタムビルドとカスタム構成の追加の間に混乱があります:

  • 構成は、VisualStudioやXCodeなどの特別なツール用です
  • ビルドタイプははるかに生々しい機能です

したがって、カスタムビルドタイプを追加するために、CMAKE_CONFIGURATION_TYPES変数を操作する必要はまったくありません。説明されているように、対応する変数を設定して使用を開始するだけです。

SET(GCC_DEBUG_FLAGS "-g -Wall")

# Add new build types
message("* Adding build types...")
SET(CMAKE_CXX_FLAGS_COVERAGE
    "${GCC_DEBUG_FLAGS} -fprofile-arcs -ftest-coverage"
    CACHE STRING "Flags used by the C++ compiler during coverage builds."
    FORCE )
SET(CMAKE_C_FLAGS_COVERAGE
    "${GCC_DEBUG_FLAGS} -fprofile-arcs -ftest-coverage"
    CACHE STRING "Flags used by the C compiler during coverage builds."
    FORCE )
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE
    ""
    CACHE STRING "Flags used for linking binaries during coverage builds."
    FORCE )
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
    ""
    CACHE STRING "Flags used by the shared libraries linker during coverage builds."
    FORCE )
MARK_AS_ADVANCED(
    CMAKE_CXX_FLAGS_COVERAGE
    CMAKE_C_FLAGS_COVERAGE
    CMAKE_EXE_LINKER_FLAGS_COVERAGE
    CMAKE_SHARED_LINKER_FLAGS_COVERAGE )

ヘルプ文字列を更新することもできます(ちなみに、デフォルトのビルドタイプを設定するとともに):

IF(NOT CMAKE_BUILD_TYPE)
   SET(CMAKE_BUILD_TYPE Debug
       CACHE STRING "Choose the type of build : None Debug Release RelWithDebInfo MinSizeRel Coverage."
       FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)
message("* Current build type is : ${CMAKE_BUILD_TYPE}")

これを行う別のビルドタイプからデフォルトオプションを継承しようとすることについての少しの警告:

SET(CMAKE_CXX_FLAGS_COVERAGE
    "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage"
    CACHE STRING "Flags used by the C++ compiler during coverage builds."
    FORCE )

構成が再度ソースされるたびに(何かを変更するたびに)追加のオプションが追加され続けるため、これは 悪い考えです。

于 2012-07-11T17:00:03.760 に答える