Рандомизировать Сделать цели для цели

У меня есть библиотека C++, и у нее есть несколько статических объектов C++. Библиотека может пострадать от статической инициализации C++. Я пытаюсь проверить непредвиденные зависимости единицы перевода путем рандомизации порядка *.o файлы во время сборки.

Я посетил 2.3 Как сделать Процессы Makefile в руководстве по GNU, и он говорит мне:

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

Я также следовал пункту 9.2 "Аргументы для определения целей", но лечение не было предоставлено. Это не удивило меня.

Можно ли заставить Make рандомизировать свои цели? Если так, то как мне это сделать?

Если нет, есть ли альтернативы? Это в тестовой среде, поэтому у меня есть больше инструментов, чем просто GNUmake.

Заранее спасибо.

2 ответа

Решение

Это действительно определяется реализацией, но GNU Make будет обрабатывать цели слева направо.

Скажи, что у тебя есть OBJS переменная с объектами, которые вы хотите рандомизировать, вы можете написать что-то вроде (используя, например, shuf):

RAND_OBJS := $(shell shuf -e -- $(OBJS))
random_build: $(RAND_OBJS)

Это работает до тех пор, пока вы не используете параллельный make (-j опция). Если ваш заказ все равно будет рандомизирован, но это также будет зависеть от количества заданий, загрузки системы, текущей фазы луны и т. Д.

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

Эта функция была недавно добавлена ​​в https://savannah.gnu.org/bugs/index.php?62100 и пока доступна только вGNU makeGit-дерево.

Другие вопросы по тегам