Ovodus Ответов: 3

Visual studio 2019 не хочет создавать ASM-файлы для выпуска LIB, что я делаю не так?


Я использую эту командную строку:
/permissive- /MP /GS- /Qpar /GL /W4 /wd"4530" /Gy /Zc:wchar_t /I"C:\oTemplates\oLib\oLib\src" /I"C:\oTemplates\oLib\oLib\inc" /Gm- /Ox /Fd"C:\oTemplates\oLib\oLib\tmp\64aRavx2\vc142" /fp:precise /Zp1 /D "AMD" /D "NDEBUG" /D "_CONSOLE" /fp:except- /errorReport:none /GF- /WX- /Zc:forScope /GR- /arch:AVX2 /Gv /Oi /MD /FC /Fa"C:\oTemplates\oLib\oLib\asm\64aRavx2\" /nologo /Fo"C:\oTemplates\oLib\oLib\tmp\64aRavx2\" /FAcs /Ot /diagnostics:column /Ob3 /favor:AMD64
чтобы скомпилировать LIB проект в VS 2019 и
"C:\oTemplates\oLib\oLib\asm\64aRavx2\"
остается пустым. Но он создается во время компиляции.

Если я переключусь на настройки отладки:
/JMC /permissive- /MP /GS- /W4 /wd"4530" /Zc:wchar_t /I"C:\oTemplates\oLib\oLib\src" /I"C:\oTemplates\oLib\oLib\inc" /ZI /Gm- /Od /Fd"C:\oTemplates\oLib\oLib\tmp\64aDavx2\vc142" /fp:precise /Zp1 /D "AMD" /D "_DEBUG" /D "_CONSOLE" /fp:except- /errorReport:none /GF- /WX- /Zc:forScope /RTC1 /GR- /arch:AVX2 /Gv /MDd /FC /Fa"C:\oTemplates\oLib\oLib\asm\64aDavx2\" /nologo /Fo"C:\oTemplates\oLib\oLib\tmp\64aDavx2\" /FAcs /diagnostics:column /Ob3 /favor:AMD64 
или, если я переключаю тип проекта с LIB на EXE, соответствующая папка заполняется файлами ".asm", как обычно.
Компилятор не будет генерировать asm-файлы только для версий выпуска статической библиотеки одного и того же кода.

Что я делаю не так или как определить, в чем заключается проблема?

Что я уже пробовал:

Кстати, вывод не производит никаких ошибок ни в одном из способов:
1>------ Rebuild All started: Project: oLib, Configuration: Release - AVX2 64 AMD ------
1>lib.cpp
1>oLib.vcxproj -> C:\oTemplates\oLib\oLib\bin\oLib64aRavx2.lib
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

3 Ответов

Рейтинг:
22

Ovodus

На Либ проектов, необходимо удалить параметр /GL ("свойства конфигурации"-и GT;"с/С++"-и GT;"оптимизация"-и gt;"Все программы оптимизации") к производству .ASM-файлы.


Рейтинг:
1

phil.o

Недавно я видел заметку о том, что компилятор MSVC не поддерживает встроенную сборку для 64-битного семейства процессоров x86.
Это было в проекте под названием angelscript.
Angelscript - Copile the library - рекомендации для конкретных платформ[^]
Для 64-битных сборок существует предварительная настройка событий сборки, которая заботится о генерации встроенной сборки. Может быть, вы можете изучить, как они решили этот вопрос?


Ovodus

Дело не в этом. Речь идет о любом проекте:
"Свойства конфигурации"->"C/C++"->"выходные файлы"->"вывод ассемблера" - & "свойства конфигурации"->"C/C++"->"выходные файлы"->"расположение списка ASM".
Надеюсь, теперь все более ясно. Это хорошая функция, которая помогает понять, как компилятор работает с вашим кодом.

Кстати: "ассемблерная встраивание" действительно не поддерживается. Но никто не запрещает вам использовать MASM в вашем проекте. Короче говоря, теперь требуется хранить asm-код в отдельных файлах.

Рейтинг:
1

Shao Voon Wong

Создайте проект DLL и в Visual Studio добавьте все существующие файлы из статического проекта Lib в проект DLL. Убедитесь, что вы не копируете исходные файлы в папку проекта DLL, чтобы избежать дублирования исходного кода: проект DLL может получить доступ к исходным файлам из папки проекта static Lib просто отлично.

Создайте библиотеку DLL с помощью asm generation. Вот вам и ваш ассемблерный код.


Ovodus

К сожалению, это не вариант для меня. Мне нужно построить автоматизированную систему компиляции для тестирования различных алгоритмов на разных процессорах в самых разных условиях. Ручные модификации проекта будут стоить мне тонны времени и сделают мои отчеты недействительными из-за вероятных ошибок.