将library.type
设置为static
并运行mvn -X clean compile
时,DEBUG输出会显示:
[DEBUG]执行:Java13CommandLauncher:执行' C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin \ amd64 \ cl'有论据:
''
' / C'
' / NOLOGO'
' / EHSC'
' / DNDEBUG'
' / MD'
' / GR'
...
包括/MD
,恕我直言不应该出现在这里。对于将test.link
设置为static
并将test.link
设置为shared
的源文件进行编译,编译可执行文件同样适用。我将使用/MD
的唯一情况是编译链接到共享库的可执行文件。
即使maven生成了一个静态库并且测试运行没有错误,但在代码中设置_DLL
define会混合我的__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>
答案 0 :(得分:1)
/ MD和/ MT编译器标志由我监督的<runtime/>
属性控制,它指定生成的工件对动态C运行时库(CRT)的依赖性
对于(runtime | library.type)属性对的不同组合,生成的lib和test可执行文件的checking the runtime type dependencies显然是:
(static | static):/ MT使用,静态lib,test和lib没有CRT dep
(静态|共享):/ MT使用,dyn lib,test和lib没有CRT dep,测试在dll上有rt dep
(dynamic | static):/ MD使用,静态lib,test和lib有CRT dep
(动态|共享):/ MD使用,dyn lib,test和lib都有CRT dep,测试有drt dep在dll上
说明: