Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler errors cmake/make-无法识别的命令行选项“-std=c++;“14”节但是G++;做_Compiler Errors_Cmake_Makefile_G++_C++14 - Fatal编程技术网

Compiler errors cmake/make-无法识别的命令行选项“-std=c++;“14”节但是G++;做

Compiler errors cmake/make-无法识别的命令行选项“-std=c++;“14”节但是G++;做,compiler-errors,cmake,makefile,g++,c++14,Compiler Errors,Cmake,Makefile,G++,C++14,我今天在服务器上的主文件夹中编译了gcc和cmake(按顺序)(服务器上的编译器已经5年了,我需要C++14功能…) 当我用命令编译东西时没有问题 g++ -std=c++14 main.cc 但是如果我使用cmake.然后使用make,我会得到以下错误: cc1plus: error: unrecognized command line option "-std=c++14" 在CMakeLists.txt中: add_definitions(-std=c++14) in-CMakeFi

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

当我用命令编译东西时没有问题

g++ -std=c++14 main.cc
但是如果我使用
cmake.
然后使用
make
,我会得到以下错误:

cc1plus: error: unrecognized command line option "-std=c++14"
在CMakeLists.txt中:

add_definitions(-std=c++14)
in-CMakeFiles/a.out.dir/flags.make

CXX_FLAGS = -I/home/jager/manufacture/usr/local/include -std=c++14
有关信息:

$ 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).

我不知道什么是fheck…

看起来您使用的是系统编译器,而不是刚刚构建的编译器。最好是使用新编译的g++:

cmake -DCMAKE_CXX_COMPILER=/path/to/your/g++ .
通过执行详细构建并查看CMake使用的
g++
路径,可以验证是否使用了正确的编译器:

make VERBOSE=1
马萨评论道:


似乎cmake正在使用系统的gcc;你应该把你的头发 CMakeLists.txt上的路径

实际上,这是正确的,这个问题可以通过添加来解决。bashrc

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

CXX=/home/BestPathEver/usr/local/bin/g++
export CXX
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}"  )
然后,更新当前会话

$ source ~/.bashrc
此时,cmake将使用良好的编译器,而无需修改项目中的任何文件

我还建议添加一些CMakeLists.txt

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

CXX=/home/BestPathEver/usr/local/bin/g++
export CXX
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}"  )
这些命令在执行时会返回一些很好的信息

$ cmake .

似乎cmake正在使用系统的gcc;你应该把你的路径放在CMakeLists.txt上;伙计,你说得对!在回答中添加这一点,我将用我所做的以及人们如何看到cmake正在使用的编译器来完成它…@Massa现在仍然是时候证明你的观点了!我的评论只是试探性的,我是通过手机发表的。我的意见是,您对其进行了扩展,并给出了自己(更完整、更正确)的答案,所以,请带着分数跑吧!:D«您最好的选择是使用新编译的g++来配置您的项目。»对我来说,最好的选择是通过设置一些环境变量来配置一个适用于所有人的项目。但是你的答案是好的,你至少应该得到一分。这实际上是更好的:当你分发你的代码时,你的用户不需要让他们的编译器和你在同一条路径上。此外,该值将存储在
cmakcache.txt
中,因此只需设置一次。一旦关闭终端窗口,您的环境变量将被删除。如果您像我一样设置变量,您就不必重新定义它们。。。我不明白为什么其他人应该把编译器放在同一个地方。正如您所说,如果您定义了变量槽命令行,那么在注销后,所使用的编译器将是安装在系统上的编译器。。。或者有些事情我不明白。我看你已经提交了你自己的答案。如果这回答了你的问题,请接受它,让它出现在列表的顶部。@Alex事实上我是在恳求马萨回答。。。因为是他的评论帮我解决了这个问题。如果他不同意,我会在几个小时内接受我的回答