質問概要。コードがcmakeで正常に構築され、外部プロジェクトとして追加されたときに失敗する
私はCMakeを使ってビルドしたプロジェクトAを持っています。これはきれいにコンパイルされます。
私はcmakeののExternalProject_Addコマンドを使用して別のプロジェクトBに引っ張ったときに、それは私が得るエラーの種類建物A.
の地点に到達したときただし、コンパイルは失敗します。それは(再び、ExternalProject_Addによってもたらされる)Aをコンパイル開始時にBをコンパイル
はこの
warning: rvalue references are a C++11 extension [-Wc++11-extensions]
ようなエラーを与えます。
-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からです。異なる部分はアスタリスク(*)の後に来ます。 デフォルト、CMAKE_BUILD_TYPEことで
# 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 ""
)
だから、プロジェクトAは何の' -std = C++ '11セットを持っていません。おそらく、この場合、プロジェクトにはRELEASEまたはDEBUG以外のビルドタイプがあります。 – Tsyvarev
これは初心者の質問かもしれませんが、ExternalProject_Addによって、追加されたプロジェクトがcmakeで設定されるのではないのですか?また、外部プロジェクトには独自のCMakeLists.txtがあり、-std = C++ 11と設定すると十分ではありませんか? – dow
@Tsyvarev CMAKE_ARGSを追加しました。-DCMAKE_BUILD_TYPE = ExternalProject_Addパートにリリースされました。 あなたが明確な回答(コメントではない)としてアドバイスを書くなら、私はそれを受け入れることができます。ありがとう! – dow