[CMake] Wrong flags in fortran project when use c library

Bill Hoffman bill.hoffman at kitware.com
Fri Oct 9 15:49:44 EDT 2009


Kelly (KT) Thompson wrote:
> On Fri, Oct 9, 2009 at 6:15 AM, Sebas <spaseba at gmail.com 
> <mailto:spaseba at gmail.com>> wrote:
> 
>     I send a example where happen explained before ( I have similar
>     struct in my Program). I include too the VS2008 project generate by
>     cmake. In the Fortran Project be can seen that use /W3 /Zm1000 /GR
>     /RTC1 /TP Flags that don't work with ifort.
>     I use CMake 2.8 rc2 (but happen same in 2.6 and 2.7)
> 
>     Thanks.
> 
>     Sebastian
> 
> 
> Sebastian,
> 
> You are mixing C, C++ and Fortran sources in a single project.  This 
> does not work well in general and particularly in CMake.  I was able to 
> restructure your sample code so that it will build with NMake Makefile 
> (Visual Studio 2008 SP1 and Intel Visual Fortran 11).
> 
> Key points:
> 
> 1. all C++ code goes into a single directory and produces a single 
> library.  The CMakeLists.txt has the project name CPPLibrary2.
> 
> 2. each C library is built only from C sources. The CMakeLists.txt files 
> are given the project name CLibrary and CLibrary2.
> 
> 3. the Fortran is also isolated into a single directory and the local 
> CMakeLists.txt file only deals with the Fortran.
> 
> 4. CMake needs help knowing how to build mixed language targets that 
> must be compiled with the Fortran compiler.  In the Fortran 
> CMakeLists.txt I had to set_target properties for LINKER_LANGUAGE.
> 
> 5. When mixing C and Fortran on the Windows platform you must use the 
> same type of runtime libraries (/MT or /MD).  The default Fortran build 
> uses /MT, so I had to set these to /MD (Fortran_FLAGS)
> 
> 6. When interfacing C++ and Fortran code, you must mark the C++ function 
> as extern "C" to avoid name mangling issues.  The Fortran also expects 
> the C++ symbol name to be all caps.  You can use Fortran's ISO_C_BINDING 
> to get around this platform issue.
> 
> There are many changes required to your sample build so I decided that a 
> zip file would be the best way to return the project to you.
>
Thanks for the work around.  However, this should work a bit smoother, 
Sebastian can you create a bug report and attach your example?

Thanks.

-Bill



More information about the CMake mailing list