Как найти путь поиска по умолчанию для включаемых файлов для gfortran
?
Для gcc
, прошлые вопросы и ответы показывали этот веб-сайт: https://gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/Search-Path.html#Search -Path
Но,
- Я не уверен, применимо ли это к
gfortran
. - Не думаю, что это применимо всегда.
Например, на сервере 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 /. , , / включают , что имеет смысл.