Hi, back converting another software distribution to a CMake-based build system. This one has a heavy reliance on Fortran 90 modules, and I noticed CMake has some issues with Fortran 90 modules.

In particular, I have noticed that CMake cannot do module dependency scanning outside of the current directory/subdirectories.

For example, if /topdir/dir1/src/ has a Fortran file with a dependency on a module built in /topdir/dir2/mod/, CMake will not instruct the module in /dir2/mod/ to be built before the Fortran file in /dir1/src/. This is not necessarily an issue as I can simply instruct CMake to build the /dir2/mod directory before the /dir1/src/ directory via add_subdirectory ordering.

According to previous mailing list entries found via Google, CMake does have functioning dependency scanning within the same directory or subdirectories.

However, when attempting to build Fortran 90 files in a directory, I have encountered the following error:

*** No rule to make target `dir/CMakeFiles/target.a.dir/foo2.mod.stamp', needed by `dir/foo.tmp.f'. Stop.

where both foo and foo2 are Fortran 90 files and independently preprocessed by /lib/cpp in a custom_command (hence the extension renamed to .tmp.f). It appears CMake recognizes that the module built from foo2.f90 is needed for foo.f90 (.mod.stamp file), but instead of then building the dependent module, gnumake fails.

It seems that maybe a solution here would be for CMake to place its .mod.stamp files in the /CMakefiles directories during configuration time. This method would allow the dependency scanning to find necessary modules in other directories because of the already present .mod.stamp files and build their Fortran 90 files first. Also, it would hopefully avoid the error I have found where a Fortran 90 file is dependent upon a module built from another Fortran 90 file in the same directory.

Another potentially great feature which I had requested earlier (but hopefully mentioning again helps) is to separate the include_directories function from the module paths, since non-GNUFortran compilers (e.g. ABSoft) may have different flags for module paths and CMake currently doubles all includes and module paths as each other.

Thanks for any feedback and/or assistance.  Using CMake 2.8.6.
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to