2012-03-25 3 views
1

У меня есть некоторые проблемы с включением библиотеки в make-файл.Ошибка при включении библиотеки в make-файл

Библиотека nlopt установлена ​​в /usr/lib и моя программа правильно работает, когда я скомпилировать его из командной строки:

gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec

Однако мне нужно использовать Makefile. Один ниже, кажется, хорошо, но это не работает, я получаю:

main.f90:19: Error: Can't open included file 'nlopt.f'

Не могли бы вы помочь в поиске ошибку, пожалуйста?


INCLUDES = -I/usr/include 

LFLAGS = -L/usr/lib 

LIBS = -lnlopt -lm 

objects = main.o 

f90comp = gfortran 

exec: $(objects) 
    $(f90comp) $(INCLUDES) -o exec $(objects) $(LFLAGS) $(LIBS) 

main.o: main.f90 
    $(f90comp) -c main.f90 

clean: 
    rm *.o *.mod exec 
    rm $(objects) 

# End of the makefile 

(до $ (f90comp) и гт, есть вкладка)

+2

Где находится файл 'nlopt.f'? Это в 'usr/include'? И вы уверены, что компилятору не нужен порядок аргументов? (Я бы постарался точно указать тот же порядок). – Beta

+1

Можете ли вы показать весь вывод из 'make'? У меня такое чувство, что перед тем, как ваше сообщение об ошибке будет поучительным. – sarnold

+1

Иногда также полезно попробовать make -n, так как это покажет вам, что именно пытается сделать команда. – mgilson

ответ

4

Ваше сообщение об ошибке говорит, что nlopt.f, которые вы в том числе в вашем main.f90, не доступен во время компиляции. Путь к этому файлу должен быть предоставлен компилятору. Вы делаете это правильно в вашем один лайнер, потому что вы компиляции и компоновки на одном дыхании, обеспечивая путь:

gfortran -I/usr/include main.f90 -L/usr/lib -lnlopt -lm -o exec 

Потому что это работает и make не, nlopt.f, по-видимому, не сидеть в той же директории, main.f90, а скорее в /usr/include. Вам необходимо изменить строку компиляции в своем файле Makefile:

main.o: main.f90 
    $(f90comp) -I/usr/include -c main.f90 
Смежные вопросы