5

我正在尝试使用 cmake 编译一些 C++ 代码并使用 include<emmintrin.h>进行 make 并得到以下 make 错误:

 #error "SSE2 instruction set not enabled"

我有一个带有 Linux(Mint)系统(内核 3.5)的 Intel Celeron Dual Core 处理器。

根据维基百科,赛扬双核能够执行 SSE2 指令,并且 sse2 标志根据/proc/cpuinfo. 但是这个问题的作者提到了英特尔赛扬对 SSE 的有限支持。

我已经尝试在我的以下文件中使用 SSE 编译器选项CMakeLists.txt

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")

..但没有任何改变。cmake .工作正常,但make给出了上面的错误消息。

我是否必须更改 CMakeLists.txt 中的设置,还是赛扬双核根本不(完全)支持 SSE2?

4

1 回答 1

6

你需要打电话

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
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,它们总是由包含所有必需标志的字符串组成的单个值。

于 2013-05-07T08:03:15.310 回答