[CMake] FortranCInterface not working with 3.9.0 with Intel 2015

JR Cary cary at txcorp.com
Fri Dec 15 15:29:58 EST 2017


Thanks.  All now configures with 3.9.4.

On 12/12/17 5:50 AM, Brad King wrote:
> On 12/11/2017 04:34 PM, John Cary wrote:
>> Bill Hoffman wrote:
>>> LINK: command "xilink ... /out:FortranCInterface.exe ..." failed (exit code 1169)
>>> LIBCMT.lib(winapisupp.obj) : error LNK2005:
>>> __crtSetUnhandledExceptionFilter already defined in MSVCRT.lib(MSVCR120.dll)
>>>
>>> Did you change any of the default compiler/linker flags?  It looks like
>>> it is mixing run time libraries somehow.
>> Yes, we do a replacement of MD with MT as we need fully static builds.
>>
>> We do this early in configuration, using
>>
>> The "Dynamic Replace" method described at
>>
>> https://cmake.org/Wiki/CMake_FAQ#Dynamic_Replace
>>
>> This is possible with 3.8.2.  Is there a way to get that behavior back?
> This is likely due to commit v3.9.0-rc1~144^2~1:
>
> ```
> FortranCInt: Pass CONFIG flags to try_compile
>
> This change ensures that Intel Fortran's /libs: in
> CMAKE_Fortran_FLAGS and Visual C++'s /MT or /MD in the
> CMAKE_C_FLAGS_RELEASE do not conflict with each other.
> ```
>
> With that change I'm able to reproduce the failure with
> VS 2013 and Intel 2016:
>
> ```
> cmake_minimum_required (VERSION 3.7)
> project(Test C Fortran)
> string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
> include(FortranCInterface)
> FortranCInterface_VERIFY()
> ```
>
> If the project is changing the C and C++ flags to use a static
> runtime library, it should do that for Fortran too:
>
> ```
> string(REPLACE "/libs:dll" "/libs:static" CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
> ```
>
> Adding that line fixes the problem for me.
>
> -Brad
>



More information about the CMake mailing list