cmake/make - 无法识别的命令行选项"-std = c ++ 14" - 但是G ++可以

The*_*ine 2 compiler-errors makefile g++ cmake c++14

我今天在服务器上的主文件夹中编译gcccmake(按此顺序)(服务器上的编译器已经使用了5年,我需要C++14功能......).

我按命令编译时没有问题,

g++ -std=c++14 main.cc
Run Code Online (Sandbox Code Playgroud)

但如果我使用cmake .那么make,我得到了这个错误:

cc1plus: error: unrecognized command line option "-std=c++14"
Run Code Online (Sandbox Code Playgroud)

在CMakeLists.txt中:

add_definitions(-std=c++14)
Run Code Online (Sandbox Code Playgroud)

在CMakeFiles/a.out.dir/flags.make中

CXX_FLAGS = -I/home/jager/manufacture/usr/local/include -std=c++14
Run Code Online (Sandbox Code Playgroud)

供参考:

$ g++ --version
g++ (GCC) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cmake --version
cmake version 3.3.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
Run Code Online (Sandbox Code Playgroud)

我不知道fheck是什么...

Ale*_*lex 5

您似乎正在使用系统编译器而不是您刚刚构建的编译器.最好的办法是使用新编译的g ++配置项目:

cmake -DCMAKE_CXX_COMPILER=/path/to/your/g++ .
Run Code Online (Sandbox Code Playgroud)

您可以通过执行详细构建并查看g++CMake正在使用的路径来验证是否正在使用正确的编译器:

make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)


The*_*ine 5

马萨评论道:

看来cmake正在使用系统的gcc;你应该以某种方式将你的 PATH 放在 CMakeLists.txt 上;

其实是对的,这个问题可以通过在.bashrc中添加来解决:

CC=/home/BestPathEver/usr/local/bin/gcc
export CC

CXX=/home/BestPathEver/usr/local/bin/g++
export CXX
Run Code Online (Sandbox Code Playgroud)

然后,更新您当前的会话,

$ source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

此时,cmake 将使用良好的编译器,无需修改项目中的任何文件。

让我建议添加一些CMakeLists.txt

message(STATUS "CMAKE_SYSTEM_NAME          = ${CMAKE_SYSTEM_NAME}"         )
message(STATUS "CMAKE_CXX_COMPILER_ID      = ${CMAKE_CXX_COMPILER_ID}"     )
message(STATUS "CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "CMAKE_COMPILER_IS_GNUCXX   = ${CMAKE_COMPILER_IS_GNUCXX}"  )
Run Code Online (Sandbox Code Playgroud)

当您执行这些命令时,它们会返回一些不错的信息,

$ cmake .
Run Code Online (Sandbox Code Playgroud)