gfortran: по умолчанию включить путь поиска? - PullRequest
0 голосов
/ 01 мая 2020

Как найти путь поиска по умолчанию для включаемых файлов для gfortran?

Для gcc, прошлые вопросы и ответы показывали этот веб-сайт: https://gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/Search-Path.html#Search -Path

Но,

  1. Я не уверен, применимо ли это к gfortran.
  2. Не думаю, что это применимо всегда.

Например, на сервере Linux (из-за отсутствия какого-либо другого метода) я сделал это

strace gfortran try.f90 > tmp.txt 2>&1

и обнаружил, что именно этот gfortran выполняет поиск в каталогах, например

/opt/intel/compilers_and_libraries_2016.2.181/linux/ipp/lib/intel64/x86_64-redhat-linux/4.4.7/finclude

и он не ищет /usr/include. Очевидно, этот конкретный gfortran шел с компилятором Intel Fortran и был настроен.

Итак, мой вопрос, является ли strace единственным способом узнать, какие пути поиска по умолчанию? (Мне нужно это знать, потому что я удаленно помогаю другу. У меня нет прямого доступа к его машине.)

Обновление: Я должен был упомянуть -print-search-dirs вариант. Он не включает путь поиска «include»:

gfortran -print-search-dirs | grep --color include

Вывод -print-search-dirs не включает каталоги, которые strace указывают в моем вышеупомянутом эксперименте.

Update2: Я только что обнаружил, что gfortran в Ubuntu ищет только /usr/lib/gcc/x86_64-linux-gnu/7/finclude. Я удивлен, что он даже не ищет /usr/include. Пока что кажется, что мы должны использовать -I/usr/include, тогда как нам не нужно -L/usr/lib. , , Кто-нибудь знает причину этой асимметрии?

Обновление 3: Ответ ниже показывает, как перечислить пути поиска:

echo | gfortran -E -Wp,-v -

К сожалению, в этом списке перечислены пути только препроцессора (для #include), но не для оператора INCLUDE языка Фортран.

Это можно проверить, заглянув в один из каталогов, которые препроцессор выполняет поиск. Например, я нашел cpuid.h в одном из них. Итак, я сравнил

include 'cpuid.h'

с

#include "cpuid.h"

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

Кстати, это упражнение показало, что на моем Linux сервере gfortran ищет / usr / lib / gcc /. , , / f include среди других каталогов, тогда как его препроцессор ищет / usr / lib / gcc /. , , / включают , что имеет смысл.

1 Ответ

0 голосов
/ 01 мая 2020

Для меня

gfortran -print-search-dirs

добивается цели.

Моя версия

gfortran --version
GNU Fortran (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.

GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING

Я использую ее не часто и не эксперт по Фортрану, поэтому надеюсь это помогает.

Обновление

Я оглянулся на некоторые старые заметки и нашел это заклинание:

echo | gfortran -E -Wp,-v -

Возможно, это более полезно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...