gcc 将-std=c++11设为mac终端的默认值

ebdffaop  于 8个月前  发布在  Mac
关注(0)|答案(3)|浏览(110)

当我想编译时,我需要这样指定-std=c++11

g++ -Wall -std=c++11 main.cpp -o main

字符串
我想知道是否有一个永久设置-std=c++11标志的解决方案,这样就可以:

g++ -Wall main.cpp -o main


不带标志。

lzfw57am

lzfw57am1#

创建一个别名:alias g++='g++ -std=c++11'就可以了。
(但是,OS X附带的GCC版本太古老了,它不支持C++11,你最好使用clangclang++

6ss1mwsb

6ss1mwsb2#

我知道这已经被接受了,但我觉得我有一些建议要提供。首先,你应该使用c++的makefile,这是我用来回答SO的。

CFLAGS=-std=c++11 
CFLAGS+=-stdlib=libc++
CC=clang++
#flags for test.c
cc=clang
DEBUG=-g
#warnings
WARNINGS=-Weverything
#always have -Weverything on for SO lol
OPT= -O0 -O1 -O2 -O3 -O4

test: test.cpp
    $(info set CC for compiler)
    $(CC) $(CFLAGS) $< -o $@ $(DEBUG) 

stack: stack.cpp
    $(CC) $(CFLAGS) stack.cpp -o $@ $(DEBUG) $(WARNINGS)

testc: test.c
    $(cc) $< -o $@ $(DEBUG) 

clean:
    rm test

字符串
现在,每当我下载别人的蹩脚代码,所以我有一个makefile的c和c文件,我可以很容易地改变标志,如果我想。
至于bash alias,我建议你把它命名为alias clang++11='clang++ -std=c++11,这样如果你不想使用c
11标准,你就不会覆盖clang++。最后,你可以把我刚才给你看的那一行添加到你的.bash_profile中,这是在你的家庭或~文件夹中的mac上。这将使更改永久化。一旦您更改它,请运行source .bash_profile以使更改生效。在Linux上,我认为该文件名为.bashrc。希望这些提示能帮助您在使用c++时,我建议您学习mac命令行,与Linux的不同之处,了解它可以做的一些事情是非常有用的。

4zcjmb1e

4zcjmb1e3#

好吧,这是另一件发生在我身上的事情-我使用了alias g++='g++ -std=c++20',但这只对正在进行的终端会话有效。
我找到的解决方法是转到~/.zshrc。原始的zshrc文件是:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/arnavmangla/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/arnavmangla/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/arnavmangla/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/arnavmangla/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

字符串
在这里添加了alias命令,新的zshrc是:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/arnavmangla/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
alias g++='g++ -std=c++20'
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/arnavmangla/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/arnavmangla/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/arnavmangla/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<


现在每当我打开终端的新会话时,C20中使用的版本
PS:这是我发现的一些代码,用于检查C
版本:

#include <iostream>
using namespace std;
 
int main() {
    if (__cplusplus == 202002L) std::cout << "C++20\n";
    else if (__cplusplus == 201703L) std::cout << "C++17\n";
    else if (__cplusplus == 201402L) std::cout << "C++14\n";
    else if (__cplusplus == 201103L) std::cout << "C++11\n";
    else if (__cplusplus == 199711L) std::cout << "C++98\n";
    else std::cout << "pre-standard C++\n";
}

相关问题