Форум программистов, компьютерный форум CyberForum.ru

Компиляция через Makefile - C++

Восстановить пароль Регистрация
 
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
11.05.2013, 19:04     Компиляция через Makefile #1
Есть такой Makefile. Все работает хорошо, только есть проблема. Он все время вызывает main.exe (ну или то, что пропишу). Можно как-нибудь здесь прописать, чтобы я в консоли командой "make <имя файла>" вызвал этот Makefile и
<имя файла> было подставлено везде, то есть, чтобы запускался не main а <имя файла> ??

Код
run: main
	main

main: main.o
	cc main.o -o main

main.o: main.c
	cc -c main.c -std=c99
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
11.05.2013, 20:21     Компиляция через Makefile #2
Mike_device, т.е. чтобы имя конечного бинарного файла передавалось при вызове make?
Код
$ make test
в результате получаем test.exe который запускается сразу после сборки? Я правильно понял?
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
11.05.2013, 20:27  [ТС]     Компиляция через Makefile #3
Да, все так, я это и хочу
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
11.05.2013, 20:30     Компиляция через Makefile #4
Mike_device, ну самое простое, что в голову взбрело:
Код
OUTNAME=main

run: main
		./${OUTNAME}

main: main.o
		cc main.o -o ${OUTNAME}

main.o: main.c
		cc -c main.c -std=c99
Вызов:
Код
$make OUTNAME=test
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
11.05.2013, 20:53  [ТС]     Компиляция через Makefile #5
anmartex, )) работает) спасибо)

Добавлено через 15 минут
anmartex, Кстати, а вот можно как-нибудь неявно присвоить значение переменной, то есть не писать OUTNAME=test, а просто test и этой переменной присвоится это имя?
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
12.05.2013, 10:52     Компиляция через Makefile #6
Цитата Сообщение от Mike_device Посмотреть сообщение
Кстати, а вот можно как-нибудь неявно присвоить значение переменной, то есть не писать OUTNAME=test, а просто test и этой переменной присвоится это имя?
Дело в том, что если вы просто будите передавать имя, make его будет расценивать как правило, и будет его искать в Makefile-е. Но этим можно воспользоваться, правда вам нужно будет описать в Makefile-е все варианты:
Код
OUTNAME=main

test1:
		$(MAKE) run OUTNAME="test1"

test2:
		$(MAKE) run OUTNAME="test2"

run: main
		./${OUTNAME}

main: main.o
		cc main.o -o ${OUTNAME}

main.o: main.c
		cc -c main.c -std=c99
Теперь вы сможете вызывать:
Код
$ make test1
и
Код
$ make test2
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
12.05.2013, 11:15     Компиляция через Makefile #7
Часто делают обертку над мэйком в виде скрипта, в данном случае можно сделать так
Bash
1
make OUTNAME=$1
назвать этот скрипт compile и вызывать так
Bash
1
compile progname
P.S. в винде вроде надо так
Bash
1
make OUTNAME=%1
и там еще вывод в батнике надо подавить, непомню как это делается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 12:36     Компиляция через Makefile
Еще ссылки по теме:

Компиляция C++ кода через консоль C++
Компиляция библиотеки через make.exe C++
Make, makefile, simple makefile, hello_world C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
12.05.2013, 12:36  [ТС]     Компиляция через Makefile #8
угу, хорошо, вроде понятно, спасибо всем) буду пробовать)
Yandex
Объявления
12.05.2013, 12:36     Компиляция через Makefile
Ответ Создать тему
Опции темы

Текущее время: 06:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru