anonymous@RULINUX.NET~# Last login: 2024-11-05 12:33:08
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[C][Makefile] Условная компиляция

Мне понятно как это делается в простом файле на C: #ifndef SOME_MEGA_PARAMERT и вперёд - пишешь два куска программы "с" и "без". Но у меня сложилась ситуация, когда помимо #ifndef-а добавляется ещё один файл в проект (на самом деле 2: somefile.h и somefile.c). Хочется при этом иметь возможность компилировать и первый вариант программы и второй. Следовательно надо как-то внести этот somefile.c в Makefile и при этом, чтобы его включение в проект было опциональным. Как это делается?

anonymous(*) (2013-04-23 20:21:00)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [C][Makefile] Условная компиляция от anonymous 2013-04-23 20:21:00
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

Как-то сумбурно получилось. Попробую изложить иначе.

text
Ветка A:   Ветка B:
main.c          main.c
file1.h         file1.h
file1.c         file1.c
                somefile.h
                somefile.c
 


Изменения вносятся для простоты только в main.c. Хочется объединить ветки в одну. Все различия в main.c потом спрячутся в ifdef-ы. Но появляется два файла somefile.{h,c}, которых в ветке A не существовало. Таким образом надо что-то такое добавить в Makefile, чтобы при выполнении условия (SOME_VAR=1, для примера) в проект включался ещё и дополнительный файл somefile.c. Но при SOME_VAR=0 этот файл не включался в проект и не компилировался. Засунуть текст somefile.[h,c] в тот же main.c нельзя, так как это достаточно независимая часть и может [теоретически в будущем] применяться в других файлах проекта.

anonymous(*)(2013-04-23 20:33:13)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C][Makefile] Условная компиляция от anonymous 2013-04-23 20:33:13
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

Два разных target'а, каждый со своими зависимостями?

anonymous(*)(2013-04-23 20:41:48)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C][Makefile] Условная компиляция от anonymous 2013-04-23 20:41:48
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

Не, проект один, просто можно на прерываниях, а можно циклы пустые фигачить. Странно иметь два разных target-а.

anonymous(*)(2013-04-23 20:49:19)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C][Makefile] Условная компиляция от anonymous 2013-04-23 20:49:19
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

Может что-то такое:

text
ifeq ($TYPE,"A")
SOURCES = main.c file1.c
else
SOURCES = main.c file1.c somefile.c
endif
 


Сто лет не писал мейкфайлы, пишу наугад.

SystemV(*)(2013-04-23 20:55:07)

Emacs-w3m/1.4.513 w3m/0.5.3
[#] [Добавить метку] [Редактировать] Ответ на: Re:[C][Makefile] Условная компиляция от SystemV 2013-04-23 20:55:07
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

И как задаётся $TYPE?

anonymous(*)(2013-04-23 20:57:52)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[C][Makefile] Условная компиляция от anonymous 2013-04-23 20:57:52
avatar
Скрыть

Re:[C][Makefile] Условная компиляция

>И как задаётся $TYPE?
make TYPE=A

SystemV(*)(2013-04-23 20:59:46)

Emacs-w3m/1.4.513 w3m/0.5.3
Этот тред читают 2 пользователя:
Анонимных: 2
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!