код строится чисто с помощью cmake, завершается неудачно при добавлении в качестве внешнего проекта

Резюме вопроса.

У меня есть проект A, который я строю с использованием CMake, который компилируется чисто.

Однако когда я перетаскиваю A в другой проект B с помощью команды CMake ExternalProject_Add, компиляция завершается неудачно, когда она достигает точки построения A.

Вид ошибок, которые я получаю.

Компиляция B дает ошибки, подобные этой

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

когда он начинает компилировать A (который снова вводится ExternalProject_Add).

Обратите внимание, что -std=c++11 устанавливается во всех задействованных файлах CMakeList.txt.

Обратите внимание, что я также тяну проект Google с помощью ExternalProject_Add, но это не вызывает никаких проблем.

Некоторая специфика из файлов CMakeLists.txt.

Следующий отрывок взят из 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 "")

0

Решение

От дефолт, CMAKE_BUILD_TYPE является пустой, поэтому все специфичные для конфигурации параметры опущены.

Вот почему ни один из ваших CMAKE_CXX_FLAGS_* переменная, поэтому проект построен без c++11,

Исключение составляет оптимизированный ключевое слово для 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()
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]