Попытка скомпилировать через терминал MacOS: «Нет такого файла или каталога» - PullRequest
2 голосов
/ 11 июля 2020

Пытаюсь собрать этот проект из DTU . Для этого проекта необходимо установить PETS c.

Я установил PETS c в /Users/hornymoose/petsc-3.13.3/

Я распаковал zip из GitHub в /Users/hornymoose/dtu

makefile проекта DTU содержит следующие строки:

include ${PETSC_DIR}/lib/petsc/conf/variables
include ${PETSC_DIR}/lib/petsc/conf/rules
include ${PETSC_DIR}/lib/petsc/conf/test

В этих строках {PETSC_DIR} следует заменить на каталог установки пользователя PETS c. Таким образом, я изменил эти строки на:

include $/Users/hornymoose/petsc-3.13.3/lib/petsc/conf/variables
include $/Users/hornymoose/petsc-3.13.3/lib/petsc/conf/rules
include $/Users/hornymoose/petsc-3.13.3/lib/petsc/conf/test

Для компиляции кода я пишу make topopt в Терминале. Это дает:

makefile:13: Users/hornymoose/petsc-3.13.3/lib/petsc/conf/variables: No such file or directory
makefile:14: Users/hornymoose/petsc-3.13.3/lib/petsc/conf/rules: No such file or directory
makefile:15: Users/hornymoose/petsc-3.13.3/lib/petsc/conf/test: No such file or directory
make: *** No rule to make target `Users/jhutopopt/petsc-3.13.3/lib/petsc/conf/test'.  Stop.

Я вернулся и вручную проверил, что Users/hornymoose/petsc-3.13.3/lib/petsc/conf/variables, ...rules и ...test определенно существуют и не содержат ошибок.

Почему я получаете эту ошибку? Я неправильно указываю каталог в моем makefile? Неправильный ли синтаксис в makefile?

Я уверен, что есть простое решение, я просто новичок в работе с терминалом в MacOS. Заранее спасибо!

1 Ответ

1 голос
/ 11 июля 2020

В путях есть $:

include $/Users/hornymoose/petsc-3.13.3/lib/petsc/conf/variables
        ^

Это приводит к тому, что / обрабатывается как переменная и расширяется до нуля, потому что никогда не было установлено. Запустите make с опцией --warn-undefined-variables, чтобы получить предупреждение о подобных вещах. Возможно, это уже очевидно на данном этапе, но правильная строка будет:

include /Users/hornymoose/petsc-3.13.3/lib/petsc/conf/variables

Вместо того, чтобы вручную подставлять PETSC_DIR в make-файле, вы можете предоставить его через переменную среды (при условии, что файлы сборки PETS c не плохо):

export PETSC_DIR=/Users/hornymoose/petsc-3.13.3
make topopt

... или:

PETSC_DIR=/Users/hornymoose/petsc-3.13.3 make topopt

... или передать его значение в вызов make:

make topopt PETSC_DIR=/Users/hornymoose/petsc-3.13.3
...