2012-04-12 2 views
3

У меня есть программа Fortran, которая использует модули, то есть создает .mod-файлы во время компиляции. Я также написал Makefile, который использует все .f90-файлы от src/ помещает все созданные .o-файлы в obj/ и двоичные файлы в текущую папку, и все работает нормально.Makefile: Избегайте компиляции модулей Fortran для новой папки

я теперь перекомпилировать программу в различных папках для различных вычислений (скажем calc1/), то есть я скопировать Makefile в calc1/, типа make all в calc1/ и все это делает связующая, поскольку объектные файлы уже существуют. Однако, если программа включает любые модули, компилятору нужны соответствующие .mod-файлы, которые должны присутствовать в calc1/. До сих пор я перекомпилировал все (make clean all), но с развитием программы это занимает слишком много времени!

Возможное решение, с которым я столкнулся, состоит в том, чтобы иметь одну конкретную папку для двоичных файлов (bin/). Но это не жизнеспособный вариант, потому что у меня есть задания в очереди, которые, очевидно, нуждаются в стабильном двоичном файле, в то время как я также пробую новые функции в то же время.

Итак, я ищу решение, которое каким-то образом обрабатывает файлы .mod, похожие на .o -файлы, например. размещает их в obj/.

+0

Я знаю, что сделать, но я не Не знаю Фортрана (ха!). Компилятор создает файлы 'mod' в текущем каталоге? Имеют ли они предсказуемые имена (например, 'foo.f90' =>' foo.mod')? Можете ли вы контролировать свои имена с помощью аргументов компилятору? – Beta

+0

Правильно, 'mod' файлы создаются в текущем каталоге и называются указанными в файле, например. 'foo.f90' содержит' панель модуля', тогда файл будет называться 'bar.mod'. Это невозможно контролировать во время компиляции, поскольку имя используется в других файлах, то есть в 'main.f90'. Я пишу' use bar'. – Jost

ответ

4

Я бы ожидал, что компиляторы (большинство?) Будут указывать опцию для изменения пути к файлу модуля. с gfortran, опция -J или -M (со страницы человека):

-Jdir 
-Mdir 
     This option specifies where to put .mod files for compiled modules. It is also 
     added to the list of directories to searched by an "USE" statement. 

     The default is the current directory. 

     -M is deprecated to avoid conflicts with existing GCC options. 

Я думаю, что большинство компиляторов ищет .mod файлов в каталогах, включенных в -I

EDIT

As gfortran 4.6, -M больше не поддерживается. Используйте -J

основана на одном из моих конфигурационных скриптов, флаг -module для ifort и pgf90 хотя я почти никогда не использовать эти компиляторы в эти дни, так кто-то другой должен подтвердить, что ...

+0

Подтверждено. Это '-модуль' для' ifort'. Спасибо за вашу помощь! – Jost

+0

Нет проблем. Рад помочь. – mgilson

Смежные вопросы