- integer_sequence’ is not a member of ‘std’
编译工程时报错 integer_sequence’ is not a member of ‘std’
CMake中添加 set(CMAKE_CXX_FLAGS "-std=c++14")
- std::make_unique的报错
在CMake3.16
版本编译std::make_unique
部分的代码,没有报错。在3.10
版本上编译却报错了,在CMakeLists.txt
加入set(CMAKE_CXX_STANDARD 14)
后才成功。
- CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake
我升级CMake后出现的报警,虽然不影响,但是一旦工程多了以后,这个报警会很烦人。只需要修改cmake_minimum_required (VERSION 3.19.0)
但是有时CMakeLists
太多了,不可能一一去修改,使用sed命令集体修改:1
sed -i "s/2.8.3/3.19/g" `grep 2.8.3 -rl . --include="*.txt" `
这个命令不要滥用,否则可能更改过多
- 涉及PCL的一个警告
1 | CMake Warning (dev) at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:272 (message): |
在find_package(PCL REQUIRED)
之前加上1
2
3if(NOT DEFINED CMAKE_SUPPRESS_DEVELOPER_WARNINGS)
set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS 1 CACHE INTERNAL "No dev warnings")
endif()
- No rule to make target
有时明明写好了,但编译会出现报错,看上去是CMakeLists
中没有编译规则1
2
3
4
5
6make[2]: *** No rule to make target 'package/CMakeFiles/test_bin.dir/build'。 停止。
CMakeFiles/Makefile2:3192: recipe for target 'package/CMakeFiles/test_bin.dir/all' failed
make[1]: *** [package/CMakeFiles/test_bin.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
此时再重新编译仍然报错,只要把CMakeLists
改一下,再编译就通过了
- CMakeCache 报错
执行编译时报错:1
CMake Error: The current CMakeCache.txt directory /home/user/common/build/CMakeCache.txt is different than the directory /home/user/space/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt
将当前工程的CMakeCache
全删除再编译1
rm $(find -name *.txt | grep CMakeCache)
- unrecognized command line option -msse
这是因为在arm平台上不存在SSE指令集的,在x86平台才会有,因此需要在CMakLists
文件中把—msse
字样的都注释掉