我正在尝试使用cmake编译一些C ++代码并使用include <emmintrin.h>
生成并获取以下make错误:
#error "SSE2 instruction set not enabled"
我有一个带有Linux(Mint)系统的Intel Celeron双核处理器(内核3.5)。
根据维基百科,赛扬双核能够执行SSE2指令,并且根据/proc/cpuinfo
设置sse2标志。但this question的作者提到英特尔赛扬的SSE支持有限。
我已经尝试在CMakeLists.txt
中使用SSE编译器选项:
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
..但没有改变。 cmake .
工作正常但make
给出了上面的错误消息。
我是否必须更改CMakeLists.txt中的设置或者Celeron Dual Core是否(完全)支持SSE2?
答案 0 :(得分:5)
您需要致电
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
。 / p>
关于引号的定位;在原始版本中,您将CMAKE_C_FLAGS
设置为包含2个单独的条目,第一个是CMAKE_C_FLAGS
的起始值,第二个是字符串"-msse -msse2 -msse3"
。
CMake将这样的列表保存为分号分隔条目。在CMAKE_<lang>_FLAGS
的情况下,它们总是由包含所有必需标志的字符串组成的单个值。