В Makefile можно ссылаться на аргументы, заданные в командной строке во время вызова make
.Например, рецепт в правиле может включать команду python/subsample.py $(subsample_size)
, которая вызывается в командной строке, набирая что-то вроде make subsample subsample_size=0.1
.
Я хотел бы сделать то же самое с shake
.Я написал следующее правило:
phony "echoEnvVar" $ do
ev <- fromMaybe "undefined" <$> getEnv "ev"
liftIO $ putStrLn ev
Проблема в том, что shake
рассматривает определение командной строки для переменной ev
как другую цель:
jeff@jeff-ThinkCentre-M700:~/shake-studies$ stack exec ./build.sh echoEnvVar ev=whatever
Error when running Shake build system:
* ev=whatever
Error, file does not exist and no rule available:
ev=whatever
CallStack (from HasCallStack):
error, called at src/Development/Shake/Internal/Rules/File.hs:180:58 in shake-0.16.4-7UipAYwzJlKKX7fQ0hMQ1b:Development.Shake.Internal.Rules.File
Если я вместо этого вызываю это правило без аргументов командной строки, оно ведет себя как ожидалось:
jeff@jeff-ThinkCentre-M700:~/shake-studies$ stack exec ./build.sh echoEnvVar
undefined
Build completed in 0:01m
jeff@jeff-ThinkCentre-M700:~/shake-studies$