Почему опция компилятора / MD добавляется при компиляции статической библиотеки с помощью nar-maven?

При настройке library.type в staticи работает mvn -X clean compile, вывод DEBUG показывает:

[DEBUG] Выполнить: Java13CommandLauncher: Выполнить ‘C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin \ amd64 \ cl’ с аргументами:
«»
«/ С»
‘/ NOLOGO’
‘/ EHsc’
‘/ DNDEBUG’
‘/ MD’
‘/ GR’

в том числе /MD Которое ИМХО здесь не должно присутствовать. То же самое относится и к компиляции тестового исполняемого файла с test.link установлен в static и для компиляции исходных файлов с test.link установлен в shared, Единственный случай, который я бы использовал /MD это при компиляции исполняемого файла, связанного с общими библиотеками.

Несмотря на то, что maven создает статическую библиотеку и тест работает без ошибок, установите _DLL определить внутри кода смешивает мой __declspec(dllexport/dllimport) макрос для компиляции разделяемых библиотек и не нужен вообще в статическом случае.

Кто-нибудь может подсказать мне, наблюдаю ли я за чем-то или это может быть ошибка плагина?

Пример взят и изменен из it0010-lib-static пример из com.github.maven-nar веб-сайт и файл pom сведены к минимуму:

pom.xml:

<build>
<plugins>
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>3.5.1</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>static</type>
</library>
</libraries>
<linker>
<name>msvc</name>
</linker>
<tests>
<test>
<name>HelloWorldTest</name>
<link>static</link>
</test>
</tests>
</configuration>
</plugin>
</plugins>
</build>

1

Решение

Флаги компилятора / MD и / MT контролируются <runtime/> свойство, которое я наблюдал и которое определяет зависимость произведенных артефактов от динамических библиотек времени выполнения C (CRT)

В то время как проверка зависимостей типа среды выполнения из созданного исполняемого файла lib и test для различных комбинаций пар свойств (runtime | library.type) выяснилось, что:

(статические | статические): / MT используется, статическая библиотека, тест и библиотека не имеют депонирования CRT
(статический | общий): / MT используется, dyn lib, test и lib не имеют CRT dep, test имеет rt dep на dll
(динамический | статический): / MD используется, статический lib, test и lib имеют CRT dep
(динамический | общий): / MD используется, dyn lib, test и lib имеют CRT dep, test имеет rt dep на dll

Примечания:

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]