I have had a boggle involving cmake that took several days to resolve. I had 
originally testing Fortran code with modules (and submodules) using gfortran 
exclusively. This used a directory structure roughly of the form

…/source/CMakeCache.txt
…/source/CMakeFiles/*
…/source/CmakeLists.txt
…/source/...
…/source/mod_dir/*
…/source/…

Where mod_dir was intended to be there depository for the *.mod and *.smod 
files. I then decided  to also test with the fort compiler and went to the 
directory structure

…/source/CmakeLists.txt
...
…/source/gfortran_test/CMakeCache.txt
…/source/gfortran_test/CMakeFiles/*
…/source/gfortran_test/…
…/source/gfortran_test/mod_dir/*
…/source/gfortran_test/…
…/source...
…/source/ifort_test/CMakeCache.txt
…/source/ifort_test/CMakeFiles/*
…/source/ifort_test/…
…/source/ifort_test/mod_dir/*
…/source/ifort_test/…
…/source...
…/source/mod_dir/*
…
 where …/source/gfortran_test/mod_dir/ and …/source/ifort_test/mod_dir/ were 
intended to be the repositories for the *.mod and *.smod files when the source 
code in …/source is compiled using gfortran and ifort, respectively. Note that 
I failed to delete …/source/mod_dir and its files in going to this structure. 

This structure initially worked with no problems. I was able to compile and 
execute code with both gfortran and ifort. Then working in ifort I added an 
overloaded function in one of my modules. When I went to testing with gfortran 
in …/source/gfortran_test/, however, compilation would stop claiming that the 
new overloaded function did not have an explicit interface. I was finally able 
to fix the problem by eliminating the …/source/mod_dir and its associated 
files. As near as I can tell the Makefile generated by make in the 
…/source/gfortran_test/ directory was telling gfortran to write its *.mod and 
*.smod files to …/source/gfortran_test/mod_dir/ and applying clean to that 
directory, but having …/source/mod_dir/ as one of the directories on its search 
path (and apparently the default directory searched for *.mod files) and NOT 
applying make clean to that directory. As a result gfortran was finding older 
*.mod and *.smod files in …/source/mod_dir/ that did not define the new 
overloaded function, and assumed that those files were the proper files to use 
for the explicit interfaces. I don’t know if ifort was also searching that 
directory, but not using the *.mod and *.smod files as they did not have the 
expected ifort structure.



-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

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

Reply via email to