[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