Я построил решение с VS2010 Express Edition
с набором SSE2
в свойствах C++
расширенный набор команд генерации кода.Затем в тесте программы с предопределенным значением MARCO _M_IX86_FP
выдается ожидаемое значение 2. Тот же проект, созданный с помощью msbuild.exe
с
/p:"VCBuildAdditionalOptions=/arch:SSE2"
, создает решение с / arch: SSE2 для каждогопроект.Но тест с предопределенным MARCO _M_IX86_FP
дает значение ноль.
Как можно настроить msbuild.exe
для встраивания правильного значения для SSE2 в _M_IX86_FP
?
testcase
// sse2testcase.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
int dummy;
if (_M_IX86_FP == 0)
std::cout << "No sse" <<std::endl;
if (_M_IX86_FP == 1)
std::cout << "sse1" <<std::endl;
if (_M_IX86_FP == 2)
std::cout << "sse2" <<std::endl;
std::cin >> dummy;
return 0;
}
В результате построения результата с msbuild
не отображаются правильные значения _M_IX86_FP
Обходной путь:
1. Откройте Visual Studio 2010 IDE
2. Откройте или создайте решение.(Подойдет любое решение)
3. Инструменты-> Настройки Флажок Настройки эксперта
4. В нижней части панели решений выберите Свойства (текст может быть обрезан)
5. Разверните либо Отладка, либо Отпускание.
6. Щелкните правой кнопкой мыши Microsoft.Cpp.Win32.user
7. Разверните C ++ и выберите Генерация кода
8. Рядом с полем Включить расширенный набор инструкций.Выберите нужный параметр.
9. Примените
10. Выйдите из сохранения Visual Studio 2010, когда потребуется.
Настройки Microsoft.Cpp.Win32.user применяются ко всем решениям и проектам.Это заставляет параметр / arch: SSE или / arch: SSE2 присутствовать, когда Msbuild.exe вызывает Cl.exe.Переключатель / p: «VCBuildAdditionalOptions = / arch: SSE2» не требуется.До сих пор не знаю, почему это не работает.
Полагаю, вы не можете ответить на свой вопрос.