Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Makefile
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
uriy
Ковыряюсь в проектах на ucLinux.
Куча непонятных вещей в Makefile
Среди них параметры для переменной CFLAGS.
Например такие:
Код
CFLAGS += -DUNIX -DUPLOADDIR='"/usr/tmp"'

При этом в си файле имеется следующая строчка
Код
uploadfname = (char *)malloc(strlen(UPLOADDIR)+strlen(entry.value)+2);

UPLOADDIR берется из Makefile т.к. в проекте определен другой путь.
Код
#ifndef UPLOADDIR
#define UPLOADDIR "/tmp"
#endif

Каким образом из Makefile переменная передается в си файлы. И что за загодочная буква D в начале?

Следующий пример из другого проекта:
Код
CFLAGS = @CFLAGS@ -DUSE_AUTH

В си файлах имеется:
Код
#ifdef USE_AUTH
    { "Auth", S2A, c_add_auth, NULL },
#endif

Но в этом проекте USE_AUTH не передается в си файлы. Я затолкал в один из хидеров #define USE_AUTH.
Думаю что это равнозначно. Прав я или нет? И почему параметр не передался. Куда копать?
andrew_b
CFLAGS -- это опции gcc для компиляции. Соответственно, -D это флаг gcc. Смотрите info gcc или man gcc.

Также читайте про autotools: autoconf и automake. Именно они генерят Makefile из configure.ac и Makefile.am.
mdmitry
Цитата(uriy @ Apr 27 2011, 11:04) *
Но в этом проекте USE_AUTH не передается в си файлы. Я затолкал в один из хидеров #define USE_AUTH.
Думаю что это равнозначно. Прав я или нет? И почему параметр не передался. Куда копать?

-D определяет макро для компилятора. В первом случае у Вас определен путь к файлу, если он не определен, то используется путь по умолчанию. Во втором случае определено макро и при его наличии вставляется некоторый дополнительный код в файл. Это обычное применение.
andrew_b посоветовал, что читать. Добавлю, что в сети есть переводы на русский документации по gcc.
uriy
я уже почитал и понял. спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.