2016-06-15 3 views
2

Я пытаюсь присвоить один уникальный номер каждому файлу, который скомпилирован с помощью make и sub. Для этого я экспортировал переменную в верхнем уровне сделать с помощью export varName = 1 и затем это становится увеличивается для каждого .c файла, который составляется с помощью следующейГлобальная переменная в make-файле

$(eval varName=$(shell echo $$(($(varName)+1)))) 

Проблема в varName снова инициализируется 1, когда файл суб делают вызывается из файл верхнего уровня.

Как сохранить последнее обновленное значение при вызове вспомогательных файлов make-файлов?

+0

Зачем это нужно? Возможно, лучший способ. –

+0

Я хочу определить пользовательские макросы, похожие на стандартные предопределенные макросы (__FILE__, __LINE__). Макрос __FILE__ указывает имя файла. Подобно этому я хочу реализовать что-то вроде __FILENUMBER, которое дает мне уникальный целочисленный номер для файла. Я могу назначить этот конкретный файл C с помощью -DFILE_NUMBER = fileNum. Здесь fileNum изменяется для каждого файла, который скомпилируется через Make. Любые другие предложения приветствуются. Спасибо –

+0

Итак, если, скажем, 'foo.c' получает номер файла 35, это означает, что в этом make-run скомпилирован 35-й файл , и вы скомпилируете это число в' foo.o'? Ну, в следующий раз это может быть 168-й файл для компиляции. Или он вообще не компилируется, а 'bar.c' получает номер 35, поэтому теперь' foo.o' и 'bar.o' имеют номер 35. Я не вижу, как идея имеет смысл. –

ответ

0

Экспорт переменной просто предоставляет копию, с помощью которой суб-make инициализирует свою собственную отдельную таблицу переменных. Таким образом, это не позволит записывать изменения значений.

Чтобы создать действительно глобальную переменную, вы можете вызвать внешнюю программу или скрипт, который увеличивает счетчик, сохраняемый в таблице файлов или базы данных. Однако это может привести к проблемам, если ваши подпроцессы начинаются одновременно, а не последовательно. Это приведет к параллельному доступу и, возможно, к невоспроизводимой последовательности нумерации.

Есть некие objections in general против использования суб-макета. Чтобы создать дополнительный внешний процесс для каждой компиляции, вы также увеличите время выполнения.

Смежные вопросы