为什么在使用nar-maven编译静态库时会添加编译器选项/ MD?

时间:2017-02-02 13:29:58

标签: c++ c visual-studio maven maven-nar-plugin

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>

1 个答案:

答案 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上

说明: