Я пытаюсь написать CMakeFiles.txt (никогда не делал этого раньше), и я не уверен, какой флаг компилятора использовать для C++ 11. Я использую GCC 4.8.2, а флаг - std = C++ 0x, но я не уверен, что делать с другими компиляторами. Я не думаю, что все они используют этот флаг, я считаю, что MinGW-TDM использует std = C++ 11, что бы правильный способ гарантировать, что компилятор использует C++ 11?Флаги компилятора для C++ 11
ответ
В моем проекте я просто пытаюсь добавить -std = C++ 11, и если это не работает, я пытаюсь -std = C++ 0x. Когда оба терпят неудачу, я просто оставлю это в покое. Для меня это отлично работает, но я никогда не пробовал компилятор Windows. Вот пример кода:
# test for C++11 flags
include(TestCXXAcceptsFlag)
if(NOT DISABLE_GXX0XCHECK)
# try to use compiler flag -std=c++11
check_cxx_accepts_flag("-std=c++11" CXX_FLAG_CXX11)
endif(NOT DISABLE_GXX0XCHECK)
if(CXX_FLAG_CXX11)
[add flag -std=c++11 where needed]
else()
if(NOT DISABLE_GXX0XCHECK)
# try to use compiler flag -std=c++0x for older compilers
check_cxx_accepts_flag("-std=c++0x" CXX_FLAG_CXX0X)
endif(NOT DISABLE_GXX0XCHECK)
if(CXX_FLAG_CXX0X)
[add flag -std=c++11 where needed]
...
Mabye stackoverflow.com/q/10984442 действительно помогает вам. Эрик Шёлунд предлагает взглянуть на FindCXXFeatures.cmake в ночной сборке CMake.
Редактировать: Я пробовал это с Visual C++ Microsoft, и у моего решения есть недостаток: компилятор выдает предупреждение о непризнанном флаге. Это означает, что CMake определяет флаг как правильный и добавляет его. Таким образом, вы получаете это предупреждение для каждого исполняемого файла. Добавление -Werror, или что-то вроде флага для Visual C++, должно помочь.
Вы должны установить свои флаги вручную для каждого компилятора вы таргетирования:
IF (CMAKE_COMPILER_IS_GNUCXX)
SET (CMAKE_CXX_FLAGS "-std=gnu++11")
ELSEIF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET (CMAKE_CXX_FLAGS "-std=c++11")
ELSEIF (MSVC)
# On by default
ENDIF()
в качестве, например.
Для clang вам также может понадобиться '-stdlib = libC++' –
С предстоящим выпуском CMake 3.1.0 (теперь доступным как кандидат на выпуск 2) новый способ заключается в использовании команды CMake target_compile_features, чтобы указать, какие C++ features используются. CMake из этой информации убедится, что компилятор C++ вызывается с правильными флагами командной строки (например, -std = C++ 11).
Например, эта программа C++ с именем файла main.cc позволяет использовать функции C++: cxx_strong_enums, cxx_constexpr, cxx_auto_type
#include <cstdlib>
int main(int argc, char *argv[]) {
enum class Color { Red, Orange, Yellow, Green, Blue, Violet };
constexpr float a = 3.1415f;
auto b = a;
return EXIT_SUCCESS;
}
Этот CMakeLists.txt файл будет построить его
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
add_executable(foobar main.cc)
set(needed_features
cxx_strong_enums
cxx_constexpr
cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
As (21 ноября 2014 года) версия CMake версии 3.1.0 еще не выпущена. Он теперь доступен как кандидат на выпуск 2. Обратите внимание: эта функциональность еще не была выпущена в стабильном выпуске CMake, поэтому, я думаю, используйте это только в том случае, если вам нравится экспериментировать.
set_property(TARGET your_target PROPERTY CXX_STANDARD 11)
- 1. Флаги компилятора Objective-C
- 2. C++ 11 способ проверить флаги
- 3. Дополнительные флаги компилятора для f2py
- 4. Несогласованные флаги компилятора MSBuild
- 5. Глобальные флаги компилятора в CDT
- 6. Почему для поддержки компилятора C++ 11 по-прежнему требуется флаг?
- 7. CMake переопределять собственные флаги компилятора
- 8. C++ 11 «авто» в нераскрытом C++ 11 компилятора
- 9. Как указать пользовательские флаги компилятора для компилятора Visual Studio
- 10. Подробнее Флаги компилятора гранулярного закрытия?
- 11. Как установить флаги компилятора для групп файлов в CMake?
- 12. Флаги компилятора GCC: -lg2c -lgfortran
- 13. Как использовать флаги компилятора VC++ для указания размера перечисления
- 14. Как установить флаги компилятора C++ в Visual Studio (2015
- 15. Включая опцию компилятора -std = C++ 11 правильно
- 16. Android NDK: переопределять компилятора флаги Application.mk
- 17. Поддержка стандартов компилятора (C++ 11, C++ 14, C++ 17)
- 18. Глобально набор флаги компилятора (/ Zm предел памяти)
- 19. Как добавить флаги компилятора в кодовые блоки
- 20. Repository версий компилятора багги для поддержки C++ 11
- 21. "шаблонный" disambiguator - C++ 11. Любой шанс для VS2008 компилятора?
- 22. Опция компилятора не работает для неупорядоченного набора Функция C++ 11
- 23. Где настроить флаги D компилятора в DDT
- 24. флаги компилятора clang для двоичного распределения (generic CPU)
- 25. Невозможно установить флаги компилятора в Xcode 4.3.3
- 26. Как читать флаги компилятора из файла
- 27. Различные поведение компилятора с 11
- 28. Своп UNIX флаги компилятора с более короткой
- 29. Флаги компилятора по умолчанию с Autotools
- 30. Visual Studio Preprocessor - флаги компилятора доступа
Правильный флаг для GCC 4.8. * Is -std = C++ 11'. Что касается других компиляторов, вам придется проконсультироваться со своими документами - универсального способа нет. – Angew
Связанные? http://stackoverflow.com/q/10851247/420683 – dyp
Хм, я использовал -std = C++ 0x в своих файлах make-файлов, и он работает. Я попробую предложения в этом потоке DyP, но я думаю, мне нужно будет найти документы для msvc и llvm. Спасибо, парни. – Mike