GNU make: обнаружить создание цели против обновления - PullRequest
0 голосов
/ 04 сентября 2018

Есть ли способ в GNU make определить, нужно ли создавать цель, соответственно? обновлено

Мне нужно это различие из-за странности MS lib.exe (который я должен использовать).

UN * X-подобные инструменты поддерживают "ar cr lib.a file.o", либо создавая, либо обновляя "lib.a". К сожалению, MS lib.exe требует этого:

1-й вызов: lib.exe -out: lib.lib file.obj
следующий звонок (и): lib.exe -out: lib.lib lib.lib file.obj

Итак, у меня есть две разные команды с одинаковыми целевыми и зависимостями ...

lib.lib: file.obj lib.exe -out: $ @ $ ^ <- если lib.lib не существует </p>

соответственно

lib.exe -out: $ @ $ @ $ ^ <- если lib.lib существует </p>

Я хочу, чтобы это обрабатывалось GNU make, а не делегировало его команде (она же оболочка).

Примечание: правила двойного двоеточия на самом деле не помогут, так как проблема скрыта в неявном правиле. (% .obj):% .obj $ (AR) $ (ARFLAGS) -out: $ @ $ @ $ ^

1 Ответ

0 голосов
/ 04 сентября 2018

Нет встроенного способа сделать это, но вы можете написать свое правило, чтобы сделать это:

lib.lib: file.obj
        lib.exe -out:$@ $(if $(wildcard $@),$@) $^
...