将-std=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中添加标志的参考,但我宁愿根本不碰它。

我该在哪行添加标志?is是bootstrap、cmake或make,&具体语法是什么。我尝试过将-std=c++11 or -std=gnu++11添加到每个中,但没有成功。

gcc 5.3.0正在使用

Joachim的评论是正确的,这样的标志可以工作,但看看官方说明。。。他们说你只需要这个:

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

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

顺便说一句,除非万不得已,否则不要编译。CMake甚至不提供源代码tarball,他们希望你直接从他们的源代码树中提取。使用您的发行版提供的包(首选)或使用CMake提供的官方二进制文件。

如果您不想在命令行中添加-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>)

最新更新