automake with fortran: order of file -


i facing small problem when trying build code autotools. file structure is:

$ tree  . |-- configure.ac |-- makefile.am `-- src     |-- constants.f90     |-- environment.f90     |-- init.f90     |-- main.f90     `-- util.f90 

(deleted possibly unnecessary lines) , makefile.am is:

#subdirs= bin_programs = scasr scasr_sources = \                  src/constants.f90  src/environment.f90  src/util.f90 \                 src/init.f90 src/main.f90  scasr_ldadd =  extra_dist= autogen.sh cleanfiles =*.mod  

the problem src/(*.f90)'s except main.f90 module. hence, if have write makefile hand, have:

constants.o : constants.f90  environment.o : environment.f90  init.o : init.f90 util.o constants.o  main.o : main.f90 init.o constants.o environment.o  util.o : util.f90 constants.o  

so, makefile.am, have make strict order of files in scasr_sources. i.e. sources :

scasr_sources = \                  src/constants.f90  src/environment.f90  src/util.f90 \                 src/init.f90 src/main.f90  

it compiles fine. if have as:

scasr_sources = src/main.f90 \                  src/constants.f90  src/environment.f90  src/util.f90 \                 src/init.f90   

i error:

make  all-am make[1]: entering directory `/home/rudra/programs/scasr/trunk' gfortran  -g -o2 -c -o src/main.o src/main.f90 src/main.f90:7.4:  use mget_env     1 fatal error: can't open module file 'mget_env.mod' reading @ (1): no such file or directory make[1]: *** [src/main.o] error 1 

is there way out make/configure check dependency itself? or must keep strict order?

(answers in comments. see question no answers, issue solved in comments (or extended in chat) )

@stefan wrote:

you enter dependencies directly makefile.am. put handwritten makefile rules (the third code part in post) in makefile.am. automatic dependency tracking is, far know, not (yet) possible. change addition of submodules, defined in fortran 2008 not yet implemented in popular compiler.

the op wrote:

as per @stefan's comment, have added dependencies in make file, , solved problem. have tested order of source code not important anymore. since, there not many stuff in internet available, putting complete procedure here:

  1. create dependency list (makedepf90 option)
$ makedepf90 src/*.f90 src/constants.o : src/constants.f90 src/environment.o : src/environment.f90 src/init.o : src/init.f90 src/util.o src/constants.o src/main.o : src/main.f90 src/init.o src/constants.o src/environment.o src/util.o : src/util.f90 src/constants.o 
  1. just copy-paste output of step 1 after scasr_sources:

scasr_sources = src/main.f90\ src/constants.f90 src/environment.f90 rc/util.f90 src/init.f90 src/constants.o : src/constants.f90 src/environment.o : src/environment.f90 src/init.o : src/init.f90 src/util.o src/constants.o src/main.o : src/main.f90 src/init.o src/constants.o src/environment.o src/util.o : src/util.f90 src/constants.o

nb: have not tested if work if place place else in makefile. working.


Comments

Popular posts from this blog

curl - PHP fsockopen help required -

HTTP/1.0 407 Proxy Authentication Required PHP -

c# - Resource not found error -