Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Modules and compilation problems

stedwomas
Beginner
863 Views

I have a huge program with modules inside. All compiled ok but when i introduced a new ,module all sorts of problems occurred which I could not understand . When I put the new module in i got all sorts of errors and none pointed to the root of the problem. From the internet I found that modules must be compiled first ( i think) . When I did this with the introduced module then ran a build all was ok. I also came across  the command  ifort in the discussions

 

ifort module1.f90 module2.f90 main.f90

 

and this can be used to compile modules first . How is this used and where is the procedure inserted 

 

steve Konarski

0 Kudos
7 Replies
Arjen_Markus
Honored Contributor I
854 Views

You should understand that modules may depend on each other and that therefore the order of compilation is important - each module leads to a module interface file (if that is the correct word) that contains information about the argument list of each public routine inside the module and all the public variables and other entities. These interface files (with an extension .mod) are used by the compiler to check the code in any program unit that uses a particular module..

If you change a source file, say A_file.f90, and thereby the code for a module in that file, say A_mod, then any program unit that uses that module A_mod must be compiled after that file A_file.f90.  Otherwise the module interface file for A_mod is out of date.

Build systems like Visual Studio or CMake and others examine the source code and determine the appropriate order of compilation. If you do it manually, then getting it right is a somewhat tedious but important task.

0 Kudos
Steve_Lionel
Honored Contributor III
851 Views

"ifort" is the command one uses in a command line environment to invoke the compiler. If you are using Visual Studio, you don't use that.

Yes, modules must be compiled before program units that use the module. Normally, the Visual Studio build system handles this automatically, but sometimes things get out of synch. The first thing I'd suggest is to right click on the project and select Rebuild.

If that doesn't work, close Visual Studio and open the project folder in a file window. Look for a subfolder named .vs - if you don't see it,  open Folder Options, View and enable "Show hidden files, folders and drives". Once you see the .vs folder, delete it. Then open Visual Studio and try building again.

Do make sure that the source containing the module is part of the project.

0 Kudos
stedwomas
Beginner
831 Views

Hi Steve

 

thanks for the reply - tried the Rebuild , that didn't work although i think it had some affect earlier when i was trying something- the "new " module is in the  .vfprog file, so it appears to be  part of the project. I could not find the .vs folder anywhere - maybe i am looking in the wrong place

 

0 Kudos
Steve_Lionel
Honored Contributor III
820 Views

Did you change the folder options to show hidden files, as I suggested?

If nothing else works, create a new project and add your source files to it, then build that.

0 Kudos
stedwomas
Beginner
739 Views

I did change folder options And got nothing - this project is on VS 2012- I have the VS folder on 2022 - can the program on VS2012 be fixed at all or should i give it up as a bad job,  The program is huge and any change can send it spinning 

 

  thanks Steve for your help - will try creating new project

0 Kudos
Steve_Lionel
Honored Contributor III
723 Views

Ah - you didn't mention that you were using such an old version of VS (and presumably the compiler.) I used to see this sort of thing many years ago, not recently. I suggest recreating the project in VS2022 and the current compiler.

0 Kudos
stedwomas
Beginner
697 Views

will do

 

many thanks for the tip

0 Kudos
Reply