[cmake-developers] [CMake 0013579]: FortranCInterface.cmake does not pass CMAKE_BUILD_TYPE flags
Mantis Bug Tracker
mantis at public.kitware.com
Tue Oct 9 11:16:56 EDT 2012
The following issue has been SUBMITTED.
======================================================================
http://public.kitware.com/Bug/view.php?id=13579
======================================================================
Reported By: Jordan Lefebvre
Assigned To:
======================================================================
Project: CMake
Issue ID: 13579
Category: Modules
Reproducibility: always
Severity: major
Priority: high
Status: new
======================================================================
Date Submitted: 2012-10-09 11:16 EDT
Last Modified: 2012-10-09 11:16 EDT
======================================================================
Summary: FortranCInterface.cmake does not pass
CMAKE_BUILD_TYPE flags
Description:
In attempting to compile a mixed language static Windows executable,
FortranCInterface.cmake breaks the cmake configuration.
Windows MSVC and Intel compilers toggle between static and dynamic
system/compiler libraries using /MT and /MD compiler flags respectively.
/libs:static /threads and /libs:dll /threads are equivalent to /MT and /MD
respectively.
The issues stems from a difference in initialization across C/CXX flags and
Fortran flags. The static/dynamic flags are initialized in the base
CMAKE_Fortran_FLAGS while they are initialized in the
CMAKE_[C|CXX}_FLAGS_<CMAKE_BUILD_TYPE> flags.
FortranCInterface.cmake does not pass the BUILD_TYPE flags through to the
subproject. This results in mixed dynamic and static libraries and multiply
defined symbols at linking.
Steps to Reproduce:
1) Create cmake configuration which utilizes FortranCInterface.
2) Use Intel compilers on Windows
3) Add these additional configuration options to a configuration script.bat:
cmake ^
-D CMAKE_C_FLAGS:STRING="/DWIN32 /D_WINDOWS /W3 /Zm1000" ^
-D CMAKE_CXX_FLAGS:STRING="/DWIN32 /D_WINDOWS /W3 /Zm1000 /EHsc /GR" ^
-D CMAKE_Fortran_FLAGS:STRING="/W1 /nologo /fpp" ^
-D CMAKE_C_FLAGS_RELEASE:STRING="/D_NDEBUG /O2 /MT" ^
-D CMAKE_CXX_FLAGS_RELEASE:STRING="/DNDEBUG /O2 /MT" ^
-D CMAKE_Fortran_FLAGS_RELEASE:STRING="/D_NDEBUG /O2 /MT" ^
-D CMAKE_Fortran_COMPILER:STRING=ifort ^
-D CMAKE_CXX_COMPILER:STRING=icl ^
-D CMAKE_C_COMPILER:STRING=icl ^
-G "NMake Makefiles" ^
%*
4) initialize Intel development environment
5) run script.bat path/to/src
Additional Information:
This could be fixed by standardizing the initialization of compiler flags across
all languages or passing all compiler flags through to the FortranCInterface
subproject.
This prevents a static Windows build for executable deployment.
It would be convenient to have this fixed as soon as possible.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2012-10-09 11:16 Jordan LefebvreNew Issue
======================================================================
More information about the cmake-developers
mailing list