LINUX.ORG.RU

Экспорт константы при компиляции

 , , mkafile


0

2

Доброго времени суток. Есть какой-то исходник, с кучей поддиректорий. В одной из них лежит makefile со следующим текстом:

obj-y += chtototam.o

Необходимо сделать, что бы перед сборкой этого chtototam.o в файл chtototam.c был записан номер билда (для данного файла, не для всего проекта).

Как это можно осуществить? (цели, если их описать в этом файле, игнорируются)

Ответ на: комментарий от lazyklimm

Вот тут собственно и встает вопрос, а как запустить генерацию инклуда? (предположим я, будучи ленивым, написал для этого скрипт).

RiseOfDeath ★★★★
() автор топика

Опция -D, пионеры хреновы. Нумерацию билдов привязать к svn commit или git hash.

anonymous
()
Ответ на: комментарий от anonymous

Опция -D, пионеры хреновы

Для ядра это не работает.

Я использую следующее при сборке модуля:

OV2715 := ov2715
obj-m += $(OV2715).o
REVISION := $(shell git log -n1 --format=%H $(CURDIR))
REV_FILE := revision.h

all: rev
        $(MAKE) --directory=$(LINUX_DIR) M=$(shell pwd) ARCH=arm \
                CROSS_COMPILE=$(CROSS) modules
rev:
        echo "static char *FILE_REV = \"$(REVISION)\";" > $(REV_FILE)

imb ★★
()
Ответ на: комментарий от imb

Для ядра это не работает.

Ололо. Это работает всегда и везде, независимо от целевой платформы. gcc он и в Африке gcc.

anonymous
()
Ответ на: комментарий от anonymous

Makefile

OV2715 := ov2715
REVISION := $(shell git log -n1 --format=%H $(CURDIR))
all: 
    $(MAKE) --directory=$(LINUX_DIR) M=$(shell pwd) ARCH=arm \
        -DFILE_REV=\"$(REVISION)\" \
        CROSS_COMPILE=$(CROSS) modules
вывод
$ make
make --directory=/home/kirill/Projects/MobileCam/src/linux-2.6.35.3 M=/home/kirill/Projects/MobileCam/src/OV2715 ARCH=arm \
                -DFILE_REV=\"e5080f38f3c06d836c42c308823a4a94204adca4\" \
                CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi- modules
make: invalid option -- 'D'
make: invalid option -- 'F'
...........
Подскажите в чём ошибка?

imb ★★
()
Ответ на: комментарий от anonymous

Гениально, Вы правы. Есть одно но, надо было собрать драйвер включив в него текущую ревизию, для этого был приведён makefile, который делает свое дело. Но увы, используя этот подход нельзя передать ревизию через define, но уважаемый anonymous конечно не обратил внимание на это.
Если же уважаемый anonymous может подсказать другое решение задачи, используя gcc и опцию -D, то это это будет замечательно.

imb ★★
()
Ответ на: комментарий от imb

Ну не туп ли ты? Наверняка этот Makefile написан не совсем уж криворукими ублюдками, и поддерживает что-либо вроде CFLAGS.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.