MSVC Compiler options with mojo-native in Maven
- by graham.reeds
I'm trying to set up a test environment with Maven to build VC++ and I am way behind on this.
I have 3 source files that I builds a dll (once I get this fixed it should be a simple matter to add the unit-tests):
hook.cpp
hook.h
hook.def
This is compiled, on the command line, with the following:
C:\Develop\hook\src\main\msvc>cl -o hook.dll Hook.cpp /D HOOK_DLLEXPORT /link /DLL /DEF:"Hook.def"
Which produces the expected obj, dll, lib and exp files.
So now to get this working in Maven2 with the Mojo-native plugin.
With no options Maven w/Mojo gives me this (truncated) output:
[INFO] [native:initialize {execution: default-initialize}]
[INFO] [native:unzipinc {execution: default-unzipinc}]
[INFO] [native:javah {execution: default-javah}]
[INFO] [native:compile {execution: default-compile}]
[INFO] cmd.exe /X /C "cl -IC:\Develop\hook\src\main\msvc /FoC:\Develop\hook\targ
et\objs\Hook.obj -c C:\Develop\hook\src\main\msvc\Hook.cpp"
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
Hook.cpp
[INFO] [native:link {execution: default-link}]
[INFO] cmd.exe /X /C "link.exe /out:C:\Develop\hook\target\hook.dll target\objs\
Hook.obj"
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1561: entry point must be defined
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error executing command line. Exit code:1561
mojo-native gives options for manipulating the compiler/linker options but gives no example of usage. No matter what I tweak in these settings I get the error of:
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to configure plugin parameters for: org.codehaus.mojo:native-maven
-plugin:1.0-alpha-4
(found static expression: '-o hook.dll Hook.cpp /D HOOK_DLLEXPORT /link /DLL
/DEF:"Hook.def"' which may act as a default value).
Cause: Cannot assign configuration entry 'compilerStartOptions' to 'interface ja
va.util.List' from '-o hook.dll Hook.cpp /D HOOK_DLLEXPORT /link /DLL /DEF:"Hook
.def"', which is of type class java.lang.String
The relevant part of my pom.xml looks like this:
<configuration>
<sources>
<source>
<directory>src/main/msvc</directory>
<includes>
<include>**/*.cpp</include>
</includes>
</source>
</sources>
<compilerProvider>msvc</compilerProvider>
<compilerExecutable>cl</compilerExecutable>
<!-- cl -o hook.dll Hook.cpp /D HOOK_DLLEXPORT /link /DLL /DEF:"Hook.def" -->
<compilerStartOptions>-o hook.dll Hook.cpp /D HOOK_DLLEXPORT /link /DLL /DEF:"Hook.def"</compilerStartOptions>
<!-- <compilerMiddleOptions></compilerMiddleOptions>
<compilerEndOptions></compilerEndOptions>
<linkerStartOptions></linkerStartOptions>
<linkerMiddleOptions></linkerMiddleOptions>
<linkerEndOptions></linkerEndOptions>
-->
</configuration>
How do I manipulate the compiler to produce a DLL like the command line version does?
Or should I give up and just use exec?