我正在尝试使用 cmake 编译一些 C++ 代码并使用 include <emmintrin.h>
并得到以下 make 错误:
#error "SSE2 instruction set not enabled"
我有一个带有 Linux (Mint) 系统(内核 3.5)的 Intel Celeron 双核处理器。
根据维基百科,赛扬双核能够执行 SSE2 指令,并且根据 /proc/cpuinfo
设置了 sse2 标志。 .但是this question的作者|提到了对 Intel Celeron 的有限 SSE 支持。
我已经尝试在我的 CMakeLists.txt
中使用 SSE 编译器选项:
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
..但没有任何改变。 cmake .
工作正常但是make
给出上面的错误信息。
我是否必须更改 CMakeLists.txt 中的设置,或者赛扬双核是否根本不(完全)支持 SSE2?
最佳答案
你需要打电话
<strike>set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")</strike>
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -msse3")
CMAKE_C_FLAGS
应用于 C 文件,从你帖子的 C++ 标签来看,我猜你正在编译 C++ 文件,因此需要更改 CMAKE_CXX_FLAGS
相反。
至于引号的定位;在您的原始版本中,您正在设置 CMAKE_C_FLAGS
包含 2 个单独的条目,第一个是 CMAKE_C_FLAGS
的起始值第二个是字符串 "-msse -msse2 -msse3"
.
CMake 将这样的列表保存为分号分隔的条目。在CMAKE_<lang>_FLAGS
的情况下,它们总是由包含所有必需标志的字符串组成的单个值。
关于c++ - #error "SSE2 instruction set not enabled"包含 <emmintrin.h> 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410149/