Я пытаюсь скомпилировать код C ++ с помощью cmake и сделать так, чтобы он использовал <emmintrin.h>
и получите следующую ошибку make:
#error "SSE2 instruction set not enabled"
У меня есть двухъядерный процессор Intel Celeron с системой Linux (Mint) (Kernel 3.5).
Согласно Википедии, Celeron Dual Core способен выполнять инструкции SSE2, а флаг sse2 устанавливается в соответствии с /proc/cpuinfo
, Но автор этот вопрос упоминает ограниченную поддержку SSE Intel Celeron.
Я уже пытался использовать параметры компилятора SSE в моем CMakeLists.txt
:
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
..но ничего не изменилось. cmake .
работает нормально но make
выдает сообщение об ошибке выше.
Нужно ли менять настройки в CMakeLists.txt или Celeron Dual Core просто не (полностью) поддерживает SSE2?
Вам нужно позвонить
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
, неизменно они представляют собой одно значение, состоящее из строки, содержащей все необходимые флаги.
Других решений пока нет …