[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[photran] Question about sharing code among projects
|
Hi,
I'm not sure if this is Photran-specific or it's addressed elsewhere in
the Eclipse docs, but I'm having trouble understanding if/how to share
code among several projects without building libraries or duplicating
source code.
Simple example: In ~/workspace/cow I have a source directory (src)
containing cow.f90 (the PROGRAM) and two modules m_graze and m_moo in
m_graze.f90 and m_moo.f90, respectively. This builds and links properly
to create the executable 'cow'. The executable and modules (m_graze.mod
and m_moo.mod) are stored in ~/workspace/cow/Debug and object files are
stored under ~/workspace/cow/Debug/src
Later, I create ~/workplace/sheep and have src/sheep.f90 as the program
and src/m_baa.f90 as the module m_baa. I want to 'use m_graze, only:
ruminate' in sheep.f90 to get access to the ruminate() subroutine.
If I try to compile the sheep project, I'll get an error like:
error #7002: Error in opening the compiled module file. Check INCLUDE
paths. [M_GRAZE]
Under Properties:Project References for sheep, I can select the cow
project. Under Properties:Fortran Build:Settings:Intel
Compiler:Preprocessor I can add ~/workspace/cow/Debug (location of the
module files) so the compiler now finds the cow modules and compiles
sheep.f90. However the linker dies with something like
Building target: sheep
Invoking: Intel(R) Fortran Linker
ifort -L/home/me/workspace/cow/Debug -o "sheep" ./src/sheep.o
./src/sheep.o: In function `sheep':
/home/me/workspace/sheep/src/sheep.f90:11: undefined reference to
`m_graze_mp_ruminate_'
This would normally be solved by adding libraries and library paths to
the linker settings except that there are no appropriate libraries to
link to (this is Fortran, not C.)
The cow project was perfectly capable of compiling and linking together
cow.f90, m_graze.f90 and m_moo.f90 into an executable. Yet while the
sheep project can compile sheep.f90 and m_baa.f90 and can find the
module m_graze.mod, it can't seem to find the symbols for m_graze even
though all the requisite information is present on the system for it to
do so.
It would seem to be an easy matter of configuration to get the linker
portion of ifort to find the missing pieces and put them together but I
have no idea what magic words need to be entered where in the Photran UI
to make this happen.
I confess an utter lack of interest and competence in C and the C build
process and I'd rather avoid the diversion of creating libraries (.a or
.so) unless that's the only way to make this work.
Ultimately, I'm looking for a pure Fortran solution to this problem so I
can keep a single copy of the source code and don't have to manually
maintain a pile of custom Makefiles.
So can this be done?
Apologies if this has already been documented somewhere; Google is only
showing me simple build examples, how to create modules, and how to link
with existing libraries. There don't seem to be (m)any examples of code
reuse with modules.
Thanks for any light you can shed on this,
-- Bob