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

always rebuild everything after one file is changed

lyh03259
Beginner
5,218 Views

Dear IVF for windows users,

Recently I am having a rebuild problem. I am using MSVS 2010 and Intel parallel studio with all updates patched.

I have a solution with 15 projects, half c half FORTRAN. There is one FORTRAN exe project (Let's name it F1), 14 libraries. When I edited any single file in F1 and then rebuilt, all the sources are rebuilt. If I right click on the file that I edit in F1, compile and link only, the IDE tells me that cannot find other object files. When I do something to F1, the IDE just clean everything first before anything else. Compilation of each single file is just fine.

Is there anything I can do to track why IDE runs clean each time unconditionally?

PS: It works OK in all other of my project but the one I mentioned above.

Thanks.

0 Kudos
23 Replies
Vadim_M_Intel
Employee
1,169 Views

I see that preprocessing (/fpp) is used in project. Do you have in the code (in sources which are always rebuilt) something like:

[fortran]#if defined SOME_VAR

#include "some_include"

#endif[/fortran]

? Fortran dependency scanner cannot work with conditional preprocessor directives and always set reference from "some_include" file for such sources even if SOME_VAR is not defined. If "some_include" is not found then source is always rebuilt.

0 Kudos
lyh03259
Beginner
1,169 Views

Hi Vadim,

Thanks for the replay, there are conditional preprocessor directives in the program, but not conditional includes. e.g.

[fortran]

#if defined(SINGLE_PRECISION)
# define REAL_PRECISION 4
# define FLOAT real(4)

#else

# define REAL_PRECISION 8
# define FLOAT real(8)

#endif

[/fortran]

Does these conditional thing matters to the build like you mentioned? Since in each file, all the real/double precision are declared as "FLOAT", in order to allow a single precision build and a double precision build.

Sorry for the late reply. 

0 Kudos
Mikkel_Nøhr_L_
Beginner
1,169 Views

The company I work for have had the same problem as this topic has described.

I haven't managed to find a solution online but I have come closer to locating the problem and found a workaround.

The exact problem:

I am testing on Visual Studio 2013 width the latest fortran composer installed. Our project is a mix of fortran, c and c++. The Fortran part is quite large 867 modules and it takes some time to rebuild and even build.

In the first version of Fortran Composer XE 2013 both the "Link only" and "Build" commands deleted all existing obj and pdb files before starting. In the latest version of the Fortran Composer XE 2013 only the "Link only" command clears all obj and pdb files. This is still a big problem because a "Build" often take a long time and is often not nessesary.

The workaround:

I found that if I changed the output location of the obj and pdb files from the "Intermediate Directory" the files was no longer deleted and "Link only" worked again.

For my company this is a not so nice workaround because our Visual Studio 2013 project is generated by CMake and it is not possible to change the object out location via CMake.

Good solution:

A good solution for us could therefore be one of two:

  1. Convince CMake that the Output location of obj and pdb files should be changeble from the CMakeLists.txt file
  2. Help Intel to locate and fix the bug that deletes obj and pdb files the the "Intermediate Directory" when running "Link only" in visual studio.

Notes:

The bug is also pressent when using the Fortran Composer XE 2013 with Visual Studio 2008, but it works for the older fortran 11 compilers with Visual Studio 2008.

The location of the settings mentioned above in Visual Studio 2013.

  • General->Intermediate Director
  • Fortran->Output Files->Object File Name
  • Fortran->Output Files->Program Database File Name
0 Kudos
Reply