1. 程式人生 > >如何寫cmake使其包含c++11特性 (-std=c++11如何寫進cmakeList.txt)

如何寫cmake使其包含c++11特性 (-std=c++11如何寫進cmakeList.txt)

g++ 4.8.2

cmake 2.8

之前寫cmkae編譯帶有c++11特性的程式碼有這麼一句:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
但是總會出現cc1plus: error: unrecognized command line option "-std=c++11" 報錯。
所以set(QMAKE_CXXFLAGS "-std=c++11")  類似的寫法肯定不行。
後來發現是std=c++11 這種寫法老版本不支援。
ok
直接測試新寫法:

<pre name="code" class="plain">#CMakeLists.txt
project(test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
     message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

測試c++11程式碼

//test.cc
#include <iostream>
#include<vector>
using namespace std; 
int main()
{
    const std::vector<int>v(1);
    auto a = v[0];//a為int型別
        cout <<"a : "<< a <<endl;
    decltype(v[0]) b = 0;//b為const int&型別,即std::vector<int>::operator[](size_type)const的返回型別
    auto c = 0;//c為int型別
    auto d = c;//d為int型別
    decltype(c) e;//e為int型別,c實體的型別
    decltype((c)) f = e;//f為int&型別,因為(c)是左值
    decltype(0) g;//g為int型別,因為0是右值
    return 0;
}

所以,不同版本的gcc給指定c++11支援設定了不同的標誌,也就說老版本支援-std=c++0x的寫法,新版本用-std=c++11的寫法。以上程式就是判斷本機的g++該使用那種輸出版本。

參考

http://stackoverflow.com/questions/10984442/how-to-detect-c11-support-of-a-compiler-with-cmake/20165220#20165220

http://stackoverflow.com/questions/20826135/passing-std-c11-to-cmakelists#

相關推薦

如何cmake使包含c++11特性 -std=c++11如何cmakeList.txt

g++ 4.8.2 cmake 2.8 之前寫cmkae編譯帶有c++11特性的程式碼有這麼一句: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 但是總會出現cc1plus: error: unrecognized

C++——VisualStudio的c++11特性

前言 檢視官網https://msdn.microsoft.com/library/ 從VisualStudio2010講起,主要是針對c++11特性來研究vs開發c++的IDE的強大之處 VisualStudio2010下載release(釋出版本)地址:https://docs.mi

修改L版本android.jar使包含增加的api

工作的時候有時候會在系統中增加api方法,這時候如果提供給app開發人員使用的話有兩種方法: 打包新的android.jar 使用反射 這裡簡單的說一下第一種方法,使用反射的方法可以參照之前的文章。 其實android系統內帶的framework.jar已經包

c++11特性std::thread--初識二

上篇部落格《c++11特性之std::thread–初識》初步介紹了std::thread,並且介紹了幾個成員函式。 最後的一段程式碼留了點懸念,就是vs2015會報錯,錯誤如下: error

c++11特性std::thread--初識

C++11中已經擁有了一個更好用的用於執行緒操作的類std::thread。 預設建構函式: thread() noexcept; 構造一個任何執行緒不執行的執行緒物件。 初始化函式: template <class Fn, class...

OpenCV&C++ 零散-筆記2018年11

size font nbsp art csdn pan open tor log 1、vector<> https://blog.csdn.net/ak201605050122/article/details/80225297 2、Open

c++三大特性繼承,封裝,多型及過載與多型的區別。

    封裝可以隱藏實現細節,使得程式碼模組化,繼承可以擴充套件已存在的模組,它們目的都是為了:程式碼重用。而多型是為了實現另一個目的:介面重用。     封裝是面向物件的特徵之一,是物件和類概念的主要特性。封裝是把過程和資料包圍起來,

C# 高階特性Attribute和反射

使用Attribute的時候大多需要用到反射,所以放在一起。 Attribute: 我的理解是,它可以給你的類、方法、欄位等新增一些描述性語言,在執行期間又可以通過反射的方法獲取它的內容。 在編譯期間就初始化好了。 反射: 通過反射可以在不瞭解物件的內容時,操作物件。 優點

MongoDB系列三:mongoDB C/C++驅動使用New C++11 driver

C++驅動的使用資料實在太少,應用過程中踩過不少坑,現將一些經驗整理下,共享給大家: 1、資料庫連線池: 官方提供的方法已經比較完善,簡單封裝了一下,方便使用 mongodb.h: #ifndef MongoDB_H #define MongoD

關於c++11轉發std::forward)

c++11中增加了新特性,那就是引數的轉發。有時候我們希望在一個函式中呼叫另一個函式,如下列模板: template <typename F,typename T1,typename T2> void Func(F f,T1 t1,T2 t2){   f(t1,

2018年第九屆藍橋杯省賽C/C++ A組蒻雞自己的,看不上勿噴,自己的一點想法

第一題 標題:分數 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + …. 每項是前一項的一半,如果一共有20項, 求這個和是多少,結果用分數表示出來。 類似: 3/2 當然,這只是加了前2項而已。分子分母要求互質。 注意: 需要

11C++上機報告點與直線,繼承與派生

/* * 程式的版權和版本宣告部分 * Copyright (c)2012, 煙臺大學計算機學院學生 * All rightsreserved. * 檔名稱: object.cpp * 作者:王昕彤 * 完成日期: 2013年 5 月 20 日 * 版本號: v1.0 *

c#操作XML讀XML,XML,更新,刪除節點,與dataset結合等

我用的是一種很笨的方法,但可以幫助初學者瞭解訪問XML節點的過程。已知有一個XML檔案(bookstore.xml)如下:Corets, Eva5.951、插入節點往節點中插入一個節點: XmlDocument xmlDoc=new XmlDocument();xmlDoc.

c#開源工具或者C# 開源框架

stack windows 框架 ado doc 2.0 release dal .com 1.轉載聲明:本篇內容轉載自http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html。 2. C# 開源框架(整理)

Java泛型 VS C#泛型 偽泛型 VS 真泛型

功能 方法表 語法 一個 class msil 虛方法 strong 反射 一、泛型的本質 泛型是參數化類型的應用,操作的數據類型不限定於特定類型,可以根據實際需要設置不同的數據類型,以實現代碼復用。 二、Java泛型 Java 泛型是Java1.5新增的特性,JVM並

C# 圖解教程 類型 存儲和變量

圖解 和數 引用 htm 執行 C# 值類型 jit IT    1. C#程序是一組類型聲明 C一組函數和數據類型 C++一組函數和類    2.圖 3-2 類型就是模版    3.棧存儲的數據: 某些類型變量的值 程序當前的執行環境(不明白)

制安裝kubernetes v1.11.2 第三章 二制文件下載和kubectl部署

github size date 令行 uber jin config文件 建議 根證書 繼續部署。 四、kubernetes 二進制文件下載 下載頁面:https://github.com/kubernetes/kubernetes/blob/master/CHANGEL

制安裝kubernetes v1.11.2 第四章 etcd集群部署

sys serve file nload dct scrip comm enc gdi 繼續第一章的部署。 六、部署etcd集群 6.1 kubernetes使用etcd存儲所有數據,本節極少部署一個2個節點高可用的etcd集群,復用第一章的master節點。 192.1

制安裝kubernetes v1.11.2 第十一章 node節點部署

tab flanneld tar ips html apt www. span 1.2 繼續前一章部署。 十一、node節點部署 kubernetes node 節點運行了如下組件: flannel docker kubelet kube-proxy 11.1 部署fl

制安裝kubernetes v1.11.2 第十四章 kube-proxy部署

scheduler ntc ips kubecon .json done ecs rest sna 繼續前一章的部署。 部署 kube-proxy 組件 14.1 下載和分發二進制文件,參考 第三章 分發到各節點 source /opt/k8s/bin/environme