0

質問まとめ。

私は CMake を使用してビルドしたプロジェクト A を持っています。これはきれいにコンパイルされます。

しかし、CMake の ExternalProject_Add コマンドを使用して A を別のプロジェクト B にプルすると、A をビルドする時点でコンパイルが失敗します。

私が得るエラーの種類。

B をコンパイルすると、このようなエラーが発生します

warning: rvalue references are a C++11 extension [-Wc++11-extensions]

A のコンパイルを開始するとき (これも ExternalProject_Add によって取り込まれます)。

-std=c++11関連するすべての CMakeList.txt ファイルに設定されていることに注意してください。

また、ExternalProject_Add を使用して Google プロジェクトをプルしていますが、問題は発生しません。

関連する CMakeLists.txt ファイルの詳細。

次の抜粋は、A の CMakeLists.txt からのものです。

# Use the C++11 standard.
set (CC_FLAGS "-std=c++11")

# Figure out the warning flags to use.
CHECK_CXX_COMPILER_FLAG("-pedantic-errors" SUPPORTS_PEDANTIC_ERRORS)
CHECK_CXX_COMPILER_FLAG("-Wall" SUPPORTS_WALL)
CHECK_CXX_COMPILER_FLAG("-Wextra" SUPPORTS_WEXTRA)

if (SUPPORTS_PEDANTIC) 
  set (CC_FLAGS "${CC_FLAGS} -pedantic")
endif()

# [omitted]... similarly for the rest of the flags.

set (CMAKE_CXX_FLAGS_RELEASE "-O3 ${CC_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g ${CC_FLAGS}")

以下はBさんのCMakeLists.txtより。異なる部分はアスタリスク (*) の後にあります。

# Use the C++11 standard.
set (CC_FLAGS "-std=c++11")

# Figure out the warning flags to use.
CHECK_CXX_COMPILER_FLAG("-pedantic-errors" SUPPORTS_PEDANTIC_ERRORS)
CHECK_CXX_COMPILER_FLAG("-Wall" SUPPORTS_WALL)
CHECK_CXX_COMPILER_FLAG("-Wextra" SUPPORTS_WEXTRA)

if (SUPPORTS_PEDANTIC) 
  set (CC_FLAGS "${CC_FLAGS} -pedantic")
endif()

# [omitted]... similarly for the rest of the flags.

set (CMAKE_CXX_FLAGS_RELEASE "-O3 ${CC_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g ${CC_FLAGS}")

# ************* DIFFERS HERE ************

ExternalProject_Add (
  projectA

  PREFIX "${projectA_prefix}"
  GIT_REPOSITORY "[omitted]"

  INSTALL_COMMAND ""
)

ExternalProject_Add (
   google_benchmark

   PREFIX "${GoogleBenchmarkPrefix}"
   GIT_REPOSITORY "https://github.com/google/benchmark.git"

   UPDATE_COMMAND ""

   BUILD_COMMAND make benchmark
   INSTALL_COMMAND ""
)
4

1 に答える 1

1

デフォルトは、CMAKE_BUILD_TYPEであるため、構成固有の設定はすべて省略されます。

そのため、CMAKE_CXX_FLAGS_*変数は使用されないため、プロジェクトは .xml なしでビルドされc++11ます。

Exception はの最適化されたキーワードですtarget_link_libraries:非デバッグ構成に対応するように機能します

プロジェクトのデフォルトのビルド タイプを指定することをお勧めします。この投稿では、その目的に適したテンプレートを提案しています。

# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message(STATUS "Setting build type to 'Debug' as none was specified.")
  set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
  # Set the possible values of build type for cmake-gui
  set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
    "MinSizeRel" "RelWithDebInfo")
endif()
于 2016-11-08T08:28:32.213 に答える