The*_*ine 2 compiler-errors makefile g++ cmake c++14
我今天在服务器上的主文件夹中编译gcc并cmake(按此顺序)(服务器上的编译器已经使用了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是什么...
您似乎正在使用系统编译器而不是您刚刚构建的编译器.最好的办法是使用新编译的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)
马萨评论道:
看来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)
| 归档时间: |
|
| 查看次数: |
29054 次 |
| 最近记录: |