1

设置library.typestatic并运行mvn -X clean compile时,DEBUG 输出显示:

[调试] Execute:Java13CommandLauncher: 执行 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl' 参数:
''
'/c'
'/nologo'
'/EHsc'
'/ DNDEBUG'
'/MD'
'/GR'
...

包括/MD恕我直言不应该出现在这里。这同样适用于使用 set to 编译测试可执行文件和使用set test.linktostatic编译源文件。我会使用的唯一情况是编译链接到共享库的可执行文件时。test.linkshared/MD

尽管 maven 生成了一个静态库并且测试运行没有错误,但_DLL在代码中设置定义会混淆我__declspec(dllexport/dllimport)用于编译共享库的宏,并且在静态情况下根本不需要。

任何人都可以给我一个提示,我是否正在监督某些事情,或者这可能是一个插件错误?

该示例取自网站上的示例并对其进行了修改,并将 pom 文件剥离到最小it0010-lib-staticcom.github.maven-nar

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>
4

1 回答 1

1

/MD 和 /MT 编译器标志由<runtime/>我正在监督的属性控制,它指定生成的工件对动态 C 运行时库 (CRT) 的依赖性

检查生成的 lib 的运行时类型依赖关系并测试 (runtime | library.type) 属性对的不同组合的可执行文件时,很明显:

(静态|静态):使用/MT,静态库,测试和库没有CRT dep
(静态|共享):使用/MT,dyn库,测试和库没有CRT dep,测试在dll上有rt dep
(动态|共享) static): /MD used, static lib, test and lib有CRT dep
(dynamic | shared): /MD used, dyn lib, test and lib有CRT dep, test有rt dep on dll

评论:

于 2017-02-03T12:59:15.337 回答