红联Linux门户
Linux帮助

Ubuntu 12.04 GCC4.7启用C++11

发布时间:2014-11-09 10:14:59来源:linux网站作者:sheismylife

因为想用template aliases特性,必须要GCC4.7。

又不想编译源代码,所以按照下面的方法安装。

sudo add-apt-repository ppa:Ubuntu-toolchain-r/test 
sudo apt-get update 
sudo apt-get install gcc-4.7 
sudo apt-get install g++-4.7


如果Ubuntu 12.04 系统中存在多个版本的GCC,可以在CMake工程的顶层的CMakeLists.txt中配置:

cmake_minimum_required(VERSION 2.8.7) 
set(CMAKE_C_COMPILER "/usr/bin/gcc-4.7") 
set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.7") 
project (sample) 
add_subdirectory(src bin)


然后在build目录下执行cmake .. 可以看到:

chenshu@chenshu-beijing:~/work/research/tree/normal_tree/build$ cmake .. 
-- The C compiler identification is GNU 
-- The CXX compiler identification is GNU 
-- Check for working C compiler: /usr/bin/gcc-4.7 
-- Check for working C compiler: /usr/bin/gcc-4.7 -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/g++-4.7 
-- Check for working CXX compiler: /usr/bin/g++-4.7 -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/chenshu/work/research/tree/normal_tree/build


不过我的方法不是CMake推荐的最佳方法,一共有三种方法可以参考:

http://www.cmake.org/Wiki/CMake_FAQ#Method_3_.28avoid.29:_use_set.28.29

How do I use a different compiler? 
[edit] Method 1: use environment variables 
For C and C++, set the CC and CXX environment variables. This method is not guaranteed to work for all generators. (Specifically, if you are trying to set Xcode's GCC_VERSION, this method confuses Xcode.) 
For example: 
CC=gcc-4.2 CXX=/usr/bin/g++-4.2 cmake -G "Your Generator" path/to/your/source 
[edit] Method 2: use cmake -D 
Set the appropriate CMAKE_FOO_COMPILER variable(s) to a valid compiler name or full path on the command-line using cmake -D. 
For example: 
cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source 
[edit] Method 3 (avoid): use set() 
Set the appropriate CMAKE_FOO_COMPILER variable(s) to a valid compiler name or full path in a list file using set(). This must be done before any language is set (ie before any project() or enable_language() command). 
For example: 
set(CMAKE_C_COMPILER "gcc-4.2") 
set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.2") 
 
project("YourProjectName") 
[edit]


默认C++11是不启用的。在src/CMakeLists.txt文件中加上这行:

SET(CMAKE_CXX_FLAGS "-std=c++11") # Add c++11 functionality 

然后运行

cmake ..

make VERBOSE=1


你会看到编译的g++命令后面带上了:

/usr/bin/g++-4.7-std=c++11  

现在成功了,享受C++11吧。