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
C++ 为什么是C++;指定时使用-std=gnu++;11?_C++_Cmake_Flags - Fatal编程技术网

C++ 为什么是C++;指定时使用-std=gnu++;11?

C++ 为什么是C++;指定时使用-std=gnu++;11?,c++,cmake,flags,C++,Cmake,Flags,我正在尝试编译一个应用程序,我在CMakeLists.txt option(DISPLAY "Display images and steps" OFF) option(TESTS "Build tests too" OFF) if (DISPLAY) set(CMAKE_CXX_FLAGS "-g -Wall -std=gnu++11 -DDISPLAY_IMGS") else() set(CMAKE_CXX_FLAGS "-g -Wall -std=gnu++11") endif() (

我正在尝试编译一个应用程序,我在
CMakeLists.txt

option(DISPLAY "Display images and steps" OFF)
option(TESTS "Build tests too" OFF)

if (DISPLAY)
set(CMAKE_CXX_FLAGS "-g -Wall -std=gnu++11 -DDISPLAY_IMGS")
else()
set(CMAKE_CXX_FLAGS "-g -Wall -std=gnu++11")
endif()
(行在文件的开头)我得到了如下错误:

In function ‘int main(int, char**)’:
error: in C++98 ‘featuresTypes’ must be initialized by constructor, not by ‘{...}’
有谁能告诉我它为什么这么做?事实上,在
KDevelop
中构建它可以很好地工作,但在终端(
$cmake..
$make
中构建它会产生错误


VERBOSE=1
表示:

/usr/bin/cmake -H/home/xxx/proj/prj1 -B/home/xxx/proj/prj1/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/xxx/proj/prj1/build/CMakeFiles /home/xxx/proj/prj1/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/home/xxx/proj/prj1/build'
make -f CMakeFiles/prj1.dir/build.make CMakeFiles/prj1.dir/depend
make[2]: Entering directory `/home/xxx/proj/prj1/build'
cd /home/xxx/proj/prj1/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/xxx/proj/prj1 /home/xxx/proj/prj1 /home/xxx/proj/prj1/build /home/xxx/proj/prj1/build /home/xxx/proj/prj1/build/CMakeFiles/prj1.dir/DependInfo.cmake --color=
Dependee "/home/xxx/proj/prj1/build/CMakeFiles/optimisation.dir/DependInfo.cmake" is newer than depender "/home/xxx/proj/prj1/build/CMakeFiles/prj1.dir/depend.internal".
Dependee "/home/xxx/proj/prj1/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/xxx/proj/prj1/build/CMakeFiles/prj1.dir/depend.internal".
Scanning dependencies of target optimisation
make[2]: Leaving directory `/home/xxx/proj/prj1/build'
make -f CMakeFiles/optimisation.dir/build.make CMakeFiles/prj1.dir/build
make[2]: Entering directory `/home/xxx/proj/prj1/build'
/usr/bin/cmake -E cmake_progress_report /home/xxx/proj/prj1/build/CMakeFiles 1
[ 12%] Building CXX object CMakeFiles/prj1.dir/src/cpp/main.cpp.o
/usr/bin/c++    -I/usr/local/include/opencv -I/usr/local/include -I/home/xxx/proj/prj1/src/hpp    -o CMakeFiles/prj1.dir/src/cpp/main.cpp.o -c /home/xxx/proj/prj1/src/cpp/main.cpp
/home/xxx/proj/prj1/src/cpp/main.cpp: In function ‘int main(int, char**)’:
/home/xxx/proj/prj1/src/cpp/main.cpp:99:33: error: in C++98 ‘featuresTypes’ must be initialized by constructor, not by ‘{...}’

它应该做什么呢?

您的标志根本没有进入build命令。因此,要么您试图在
CMakeLists.txt
中的
项目
行之前设置这些标志,要么您在之后包含了覆盖这些标志的内容

您可能应该将它们移动到任何
项目
行之后,并包含它们,并将它们附加到当前值的任何值,因为最后一个标志获胜

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -std=gnu++11")
if (DISPLAY)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDISPLAY_IMGS")
endif()

make VERBOSE=1
查看真正完成了什么?我敢打赌命令行输出中的
-std
选项将被覆盖。照马克说的做。我已经添加了详细的信息,我怎么知道它被覆盖了呢?你在输出中找不到-std=c+11。。。可能是标题的重复完全是误导。您实际上没有使用该标志。是的,它们应该在
project
之后。。。它现在似乎起作用了。事实上,在添加
测试
选项后,问题就出现了。如果你把
标志
放在
项目