Скомпилируйте несколько модулей в отдельных файлах в один файл obj в Intel Fortran ifort в Windows 7.

Раньше я делал в одном файле под названием umat.f90,

!!! umat.f90
module1
!! Content of module1
end module1


module2
!! Content of module2
end module2


!! This has to be a subroutine to interface with some legacy code in a software called ABAQUS
subroutine umat (argument-list)
use module1
use module2
!! Content of umat
end subroutine umat

Это работает. Я могу использовать ifort -c umat.f90, тогда он генерирует umat.obj для ссылки на программу под названием ABAQUS (которую я не могу модифицировать). Теперь, поскольку module1 и module2 можно использовать повторно, я хочу сохранить их в отдельных файлах .f90, чтобы соответствовать принципу DRY. Итак, это становится тремя отдельными файлами:

Файл №1:

!!! module1.f90
module1
!! Content of module1
end module1

Файл №2:

!!! module2.f90
module2
!! Content of module2
end module2

Файл №3:

!!! umat.f90
!! This has to be a subroutine to interface with some legacy code in a software called ABAQUS
subroutine umat (argument-list)
use module1
use module2
!! Content of umat
end subroutine umat

Однако теперь, если я запущу ifort /c module1.f90 module2.f90 umat.f90, он сгенерирует 3 файла obj. Похоже, что umat.obj больше не содержит информации о модулях из module1 и module2.

Учитывая, что я могу предоставить только один файл .obj для интерфейса с ABAQUS, могу ли я скомпилировать их в один большой файл .obj?

PS: я знаю, что могу использовать скрипт python для автоматического копирования и вставки трех файлов в один каждый раз, но это кажется действительно грязным и неэлегантным способом сделать это.


person Yuxiang Wang    schedule 09.01.2015    source источник


Ответы (1)


Я не проверял это, но я прочитал документацию ifort, и опция /Qipo[n] может работать. Из это:

/Qipo[n] Этот параметр включает межпроцедурную оптимизацию между файлами. n Необязательное целое число, указывающее количество объектных файлов, которые должен создать компилятор. Целое число должно быть больше или равно 0. Если n больше 0, компилятор создает n объектных файлов, если только n не превышает количество исходных файлов (m), и в этом случае компилятор создает только m объектных файлов.

Например: ifort /Qipo[1] /c module1.f90 module2.f90 umat.f90

Надеюсь, что это работает!

person Alex    schedule 09.01.2015
comment
как насчет Qipo-c (одна команда), т.е. ifort /Qipo-c module1.f90 module2.f90 umat.f90? - person Alex; 09.01.2015