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

Kelly (KT) Thompson kt at transpireinc.com
Fri Oct 9 15:06:32 EDT 2009


On Fri, Oct 9, 2009 at 6:15 AM, Sebas <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.

-kt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20091009/6bbed527/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PruebaFlagsCMake.zip
Type: application/zip
Size: 5005 bytes
Desc: not available
URL: <http://www.cmake.org/pipermail/cmake/attachments/20091009/6bbed527/attachment.zip>


More information about the CMake mailing list