Компиляция по F9 в C (проблема с math.h)

и другие vi-подобные редакторы

Модератор: /dev/random

Ответить
Аватара пользователя
mbI4uHKa
Сообщения: 210

Компиляция по F9 в C

Сообщение mbI4uHKa »

Привет всем.
Следующая проблема: использую vim как ide для C.
Для компиляции и запуска одной клавишей использую следующий код в моем .vimrc, который нашел где-то на просторах интернета.

Код: Выделить всё

function! BindF9_C()
if filereadable("Makefile")
set makeprg=make
map <F9> :w<CR>:make<CR>:cw<CR>:!./%<<CR>
imap <F9> <ESC>:w<CR>:make<CR>:cw<CR>:!./%<<CR>
else
map <F9> :w<CR>:make %:r<CR>:cw<CR>:!./%<<CR>
imap <F9> <ESC>:w<CR>:make %:r<CR>:cw<CR>:!./%<<CR>
endif
endfunction
au FileType c,cc,cpp,h,hpp,s call BindF9_C()


Компилирует и работает ровно до тех пор, пока не начинаю использовать math.h. Точнее, пока не обращаюсь к ее функциям (для примера sin()). В таком случае получаю ошибку:

Код: Выделить всё

undefined reference to `sin'


В этой теме нашел причину- компилятору нужен флаг -lm.
И действительно, при компиляции в терминале, с флагом -lm все работает.
Но как прикрутить его в vimrc- вопрос. Куда бы не дописывал, не выходит.

make.conf не нашел.

Может кто знает?:)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Компиляция по F9 в C

Сообщение /dev/random »

mbI4uHKa писал(а):
13.09.2011 22:00
Но как прикрутить его в vimrc- вопрос. Куда бы не дописывал, не выходит.

Его не в vimrc нужно прикручивать, а в Makefile.
Спасибо сказали:
Аватара пользователя
mbI4uHKa
Сообщения: 210

Re: Компиляция по F9 в C

Сообщение mbI4uHKa »

/dev/random писал(а):
13.09.2011 22:06
mbI4uHKa писал(а):
13.09.2011 22:00
Но как прикрутить его в vimrc- вопрос. Куда бы не дописывал, не выходит.

Его не в vimrc нужно прикручивать, а в Makefile.


верно ли я понял

Код: Выделить всё

set makeprg=make

заменить на

Код: Выделить всё

set makeprg=make \-f /мой/make/file

или исходя из моего .vimrc в папке с исходником должен лежать makefile с названием "Makefile"?

Понимаю, что к теме не относится, но возможно знаете где можно найти упрощенное руководство для создания оного?
На момент изучения языка и создания "helloworld-ов" не логично было бы перечитывать большие объемы.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: Компиляция по F9 в C

Сообщение /dev/random »

mbI4uHKa писал(а):
13.09.2011 22:34
верно ли я понял

Код: Выделить всё

set makeprg=make

заменить на

Код: Выделить всё

set makeprg=make \-f /мой/make/file

или исходя из моего .vimrc в папке с исходником должен лежать makefile с названием "Makefile"?

Последнее.

mbI4uHKa писал(а):
13.09.2011 22:34
Понимаю, что к теме не относится, но возможно знаете где можно найти упрощенное руководство для создания оного?
На момент изучения языка и создания "helloworld-ов" не логично было бы перечитывать большие объемы.


К сожалению, ничего проще официального руководства посоветовать не могу. Если нужно на русском, то вот перевод.

Но если действительно не хочется изучать, то вот шаблон простейшего мейкфайла (выравнивание делается одиночным табом, а не пробелами, это важно):

Код: Выделить всё

APPNAME = имя исполнимого файла программы
SOURCES = имена исходников (кроме хедеров) через пробел
HEADERS = имена хедеров (не системных, а написанных вами и включённых в проект)
CFLAGS = флаги компиляции (у вас пустые)
LDFLAGS = флаги линковки (у вас -lm)

OBJECTS=$(addsuffix .o, $(basename $(SOURCES))

all: $(APPNAME)

$(OBJECTS): $(HEADERS)

$(APPNAME): $(OBJECTS)
    $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@

clean:
    $(RM) $(APPNAME) $(OBJECTS)

Писал прямо сюда, не проверяя, так что где-то могут быть опечатки.
Спасибо сказали:
Аватара пользователя
mbI4uHKa
Сообщения: 210

Re: Компиляция по F9 в C

Сообщение mbI4uHKa »

Спасибо большое! :)
Тему можно закрывать, дальше разберусь.

UPD:
проблему можно решить без makefile, добавив LDFLAGS="-lm" к make.

Было

Код: Выделить всё

map <F9> :w<CR>:make %:r<CR>:cw<CR>:!./%<<CR>
imap <F9> <ESC>:w<CR>:make %:r<CR>:cw<CR>:!./%<<CR>

Стало

Код: Выделить всё

map <F9> :w<CR>:make LDFLAGS="-lm" %:r<CR>:cw<CR>:!./%<<CR>
imap <F9> <ESC>:w<CR>:make LDFLAGS="-lm" %:r<CR>:cw<CR>:!./%<<CR>


Возможно это костыль, но на данном этапе большего не нужно.:)
Спасибо сказали:
Ответить