2014-04-04 135 views
-3

我想用在Ubuntu make命令来建立一个图书馆,我收到此错误信息:加入C++ 11支持的Makefile

In file included from /usr/include/c++/4.7/cstdint:35:0, 
       from /home/mohammad/face-analysis-sdk-stable/src/utils/helpers.hpp:26, 
       from /home/mohammad/face-analysis-sdk-stable/src/utils/command-line-arguments.cpp:21: 
/usr/include/c++/4.7/bits/c++0x_warning.h:32:2: error: #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. 
make[2]: *** [src/utils/CMakeFiles/utilities.dir/command-line-arguments.cpp.o] Error 1 
make[1]: *** [src/utils/CMakeFiles/utilities.dir/all] Error 2 
make: *** [all] Error 2 

我明白,我需要添加C++ 11标志某处,但我从来没有使用过make文件,我查看了make文件,我找不到应该在哪里添加这个。 我找不到任何提及g ++或编译标志或任何东西。

以下是make文件的一部分,请问我该编辑小麦吗?

# CMAKE generated file: DO NOT EDIT! 
# Generated by "Unix Makefiles" Generator, CMake Version 2.8 

# Default target executed when no arguments are given to make. default_target: all .PHONY : default_target 

#============================================================================= 
# Special targets provided by cmake. 

# Disable implicit rules so canonical targets will work. .SUFFIXES: 

# Remove some rules from gmake that .SUFFIXES does not remove. SUFFIXES = 

.SUFFIXES: .hpux_make_needs_suffix_list 

# Suppress display of executed commands. $(VERBOSE).SILENT: 

# A target that is always out of date. cmake_force: .PHONY : cmake_force 

#============================================================================= 
# Set environment variables for the build. 

# The shell in which to execute make rules. SHELL = /bin/sh 

# The CMake executable. CMAKE_COMMAND = /usr/bin/cmake 

# The command to remove a file. RM = /usr/bin/cmake -E remove -f 

# The program to use to edit the cache. CMAKE_EDIT_COMMAND = /usr/bin/cmake-gui 

# The top-level source directory on which CMake was run. CMAKE_SOURCE_DIR = /home/mohammad/face-analysis-sdk-stable 

# The top-level build directory on which CMake was run. CMAKE_BINARY_DIR = /home/mohammad/face-analysis-sdk-stable/build 

#============================================================================= 
# Targets provided globally by CMake. 

# Special rule for the target edit_cache edit_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." /usr/bin/cmake-gui 
-H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : edit_cache 

# Special rule for the target edit_cache edit_cache/fast: edit_cache .PHONY : edit_cache/fast 

# Special rule for the target rebuild_cache rebuild_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." /usr/bin/cmake 
-H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : rebuild_cache 

# Special rule for the target rebuild_cache rebuild_cache/fast: rebuild_cache .PHONY : rebuild_cache/fast 

# The main all target all: cmake_check_build_system  $(CMAKE_COMMAND) -E cmake_progress_start /home/mohammad/face-analysis-sdk-stable/build/CMakeFiles /home/mohammad/face-analysis-sdk-stable/build/CMakeFiles/progress.marks $(MAKE) -f CMakeFiles/Makefile2 all  $(CMAKE_COMMAND) -E cmake_progress_start /home/mohammad/face-analysis-sdk-stable/build/CMakeFiles 0 .PHONY : all 

# The main clean target clean: $(MAKE) -f CMakeFiles/Makefile2 clean .PHONY : clean 

# The main clean target clean/fast: clean .PHONY : clean/fast 

# Prepare targets for installation. preinstall: all  $(MAKE) -f CMakeFiles/Makefile2 preinstall .PHONY : preinstall 

# Prepare targets for installation. preinstall/fast: $(MAKE) -f CMakeFiles/Makefile2 preinstall .PHONY : preinstall/fast 

# clear depends depend:  $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 .PHONY : depend 

#============================================================================= 
# Target rules for targets named utilities 

# Build rule for target. utilities: cmake_check_build_system $(MAKE) -f CMakeFiles/Makefile2 utilities .PHONY : utilities 

# fast build rule for target. utilities/fast: $(MAKE) -f src/utils/CMakeFiles/utilities.dir/build.make src/utils/CMakeFiles/utilities.dir/build .PHONY : utilities/fast 
+2

如果您需要完整的C++ 11支持,您需要超过4.8.1版的gcc版本,但以前的版本仅对此版本的标准提供部分和不完整的支持。 – user2485710

+2

通常在某处有一个'CXX_FLAGS'变量,你可以在其中添加'-std = C++ 11' –

+0

如果你仍然可以访问它,你应该真的编辑'CMakeFiles.txt'文件,或者改变用于例如“CXXFLAGS” 'ccmake'。您发布的文件是生成的文件。 –

回答

5

你的Makefile已经被CMake产生。

您应该在您的CMakeLists.txt中激活C++11的编译器选项。

我做这样的:

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

当你将生成您的解决方案,它只会正确的标志添加到您的Makefile。

+0

它通过了这一步,但它现在正在产生一些编译错误,这是正常的?我正在编译一个库,这应该是一个测试版本 –

+0

@ Mhd.Tahawi我不能说这是正常的或没有看到编译错误。它与C++ 11有关吗?什么是图书馆? –

+0

CI2CV人脸库,谢谢你的回复,我会深入研究并发布一个新的问题,如果需要的话。 感谢您的回答,这是一个救星! –

2

看起来您的Makefile已经由CMake生成。因此,对于与C++ 11标准编制该行添加到的CMakeLists.txt

​​
+0

[add_definitions](http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html)仅用于预处理器定义。我不知道是否有其他标志滥用它的缺点。 – user2079303