传递-std = c ++ 11作为CMake的编译器选项

时间:2016-01-14 05:27:42

标签: c++11 cmake

我正在尝试使用以下命令在linux ec2 AMI上编译CMake

/bootstrap --prefix=${MYDIR} 
cmake -DCMAKE_C_COMPILER=/home/mybin/bin/gcc -DCMAKE_CXX_COMPILER=/home/mybin/bin/g++ -DCMAKE_INSTALL_PREFIX=${MYDIR} 
make

我收到以下错误

#error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

-std=c++11 -std=gnu++11上搜索信息后,我仍然无法找到如何设置这些标志。我找到了在makefile中添加标志的参考,但我宁愿不去触摸它。

我要将标志添加到哪行?是bootstrap,cmake或make,&具体的语法是什么?我尝试过向每个人添加-std=c++11 or -std=gnu++11而没有运气。

正在使用gcc 5.3.0

2 个答案:

答案 0 :(得分:2)

Joachim的评论是正确的,这样的旗帜会起作用,但是看官方说明......他们说明你需要的是:

./bootstrap --prefix=${MYDIR} && make && make install

或者使用cmake。不是都。如果您打算使用cmake,我强烈建议您在继续阅读之前阅读man cmake

作为旁注,除非你绝对必须,否则不要编译。 CMake甚至不提供源代码压缩包,他们希望您直接从源代码树中提取。使用您的发行版提供的包(首选)或使用CMake提供的官方二进制文件。

答案 1 :(得分:0)

如果您不想在命令行中添加-DCMAKE_CXX_FLAGS = -std = c ++ 11但是更喜欢在CMakeLists.txt中使用,请尝试:

if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_REQUIRED_FLAGS "-std=c++11")
endif()

add_library(<library_name_you_like>, INTERFACE)
target_compile_options(<library_name_you_like> INTERFACE ${CMAKE_REQUIRED_FLAGS})

在上面的代码之后,现在你有了一个支持c ++ 11的库。

您可以将library_name_you_like链接到任何库/可执行文件,如:

target_link_libraries(<library_or_executable> <library_name_you_like>)