Как скомпилировать C++ с поддержкой C++11 в терминале Mac



Я хотел скомпилировать исходный код C++11 в терминале Mac, но не удалось. Я пытался g++ -std=c++11,g++ -std=c++0x,g++ -std=gnu++11 и g++ -std=gnu++0x но ничего не получалось. Терминал всегда читается unrecognized command line option. Однако,g++ -std=gnu и такие вещи работали нормально (конечно, исходный код C++11 не мог пройти).



какой параметр следует использовать для включения поддержки C++11?



кстати, инструмент командной строки, который я использую, установлен в Xcode, и я уверен, что они обновлены.

682   2  

2 ответов:

как уже упоминалось, вы должны использовать clang++, а не g++. Кроме того, вы должны использовать библиотеку libc++ вместо libstdc++ по умолчанию; включенная версия libstdc++ довольно старая и поэтому не включает в себя функции библиотеки C++11.

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

если вы не установили инструменты командной строки для Xcode, вы можете запустить компилятор и другие инструменты, не делая этого с помощью .

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

также, если есть особое предупреждение вы хотите отключить вы можете передать дополнительные флаги компилятору, чтобы сделать это. В конце предупреждающих сообщений он показывает вам наиболее конкретный флаг, который позволит включить предупреждение. Чтобы отключить это предупреждение, вы добавляетеno- на имя предупреждения.

например, вам, вероятно, не нужны предупреждения о совместимости c++98. В конце этих предупреждений он показывает флаг -Wc++98-compat и чтобы отключить их вы проходите -Wno-c++98-compat.

XCode использует clang и clang++ при компиляции, а не g++ (предполагая, что вы не настроены вещей). Вместо этого попробуйте:

$ cat t.cpp
#include <iostream>

int main()
{
    int* p = nullptr;
    std::cout << p << std::endl;
}
$ clang++ -std=c++11 -stdlib=libc++ t.cpp
$ ./a.out 
0x0

спасибо ответ bames53 за указание на то, что я пропустил -stdlib=libc++.

если вы хотите использовать некоторые расширения GNU (а также использовать C++11), вы можете использовать -std=gnu++11 вместо -std=c++11, который включит режим C++11, а также сохранит включенными расширения GNU.

Comments

    Ничего не найдено.