Можно ли проверить, объявлено ли определение C в Makefile GNU? - PullRequest
0 голосов
/ 30 ноября 2010

Я хочу включить разные каталоги в мою сборку в зависимости от того, объявлен ли #define в файле .h моего проекта Возможно ли это или я поступаю совершенно неправильно?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2010

Другие ответы объяснили, почему это плохая идея.Тем не менее, один из способов сделать это - предварительно обработать фрагмент make-файла:

В foo.mk.in:

#ifdef FOO
FOO_DEFINED := y
#else
FOO_DEFINED := n
#endif

В Makefile:

foo.mk: foo.mk.in
    $(CPP) $(CPPFLAGS) -o $@ $<
include foo.mk
ifeq ($(FOO_DEFINED),y)
$(warning FOO is defined)
else
$(warning FOO is not defined)
endif
4 голосов
/ 30 ноября 2010

Да, вы. Система сборки должна настраивать код, а не наоборот. Для таких опций вы должны использовать скрипт конфигурации (или, возможно, переключиться на систему более высокой сборки: автоинструменты, CMake, QMake ...).

1 голос
/ 30 ноября 2010

Возможно, но вы идете по этому поводу неправильно.Способ включения разных каталогов с разными целями создания.Если ваш код должен знать о них, используйте -D в переключателях вашего компилятора.В качестве альтернативы, если ваша сборка должна быть в состоянии запускаться на системах других людей, лучше использовать что-то вроде autoconf .

...