응용 프로그램을 빌드 한 후 Cabal에 명령을 실행하도록 알릴 수 있습니까?빌드 명령 후 Cabal (Haskell 빌드 시스템)
예를 들어 스크립트를 사용하여 .hs
파일을 생성하고 다른 파일을 dist/build/app
디렉토리에 복사하려는 경우를 원합니다.
응용 프로그램을 빌드 한 후 Cabal에 명령을 실행하도록 알릴 수 있습니까?빌드 명령 후 Cabal (Haskell 빌드 시스템)
예를 들어 스크립트를 사용하여 .hs
파일을 생성하고 다른 파일을 dist/build/app
디렉토리에 복사하려는 경우를 원합니다.
예. postInst
및 관련 유형/작업을 살펴보십시오.
여기에 빠른 예, 당신은 더 많은 것을 알아 내기 위해 관련 작업을 hoogle 수 있습니다. 이것은 다양한 .sh 스크립트를 실행하고 파일을 복사합니다. absoluteInstallDirs
은 캐럴이 다른 파일을 어디에두고 있는지 알려주므로 해야합니다.
희망이 도움이됩니다.
import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
import System.Process
import System.Exit
main = defaultMainWithHooks fixpointHooks
fixpointHooks = simpleUserHooks { postInst = buildAndCopyFixpoint }
buildAndCopyFixpoint _ _ pkg lbi
= do putStrLn $ "Post Install: " ++ show binDir -- , libDir)
executeShellCommand "./configure"
executeShellCommand "./build.sh"
executeShellCommand $ "chmod a+x external/fixpoint/fixpoint.native "
executeShellCommand $ "cp external/fixpoint/fixpoint.native " ++ binDir
executeShellCommand $ "cp external/z3/lib/libz3.* " ++ binDir
where
allDirs = absoluteInstallDirs pkg lbi NoCopyDest
binDir = bindir allDirs ++ "/"
executeShellCommand cmd = putStrLn ("EXEC: " ++ cmd) >> system cmd >>= check
where
check (ExitSuccess) = return()
check (ExitFailure n) = error $ "cmd: " ++ cmd ++ " failure code " ++ show n
fixpointHooks = simpleUserHooks { postInst = buildAndCopyFixpoint }
이것은 Distribution.Simple.UserHooks가 변경/중단 할 수 있다는 큰 경고와 함께 제공됩니다. 그러나 그것은 아마도 당신이 가진 최고의 것입니다. – jozefg
나는이 물건이'Setup.hs'에 있다는 것을 알고 있습니까? –
@jozefg 나는 당신이 말한 것을 정말로 두려워한다. ( –
이것은 최종 사용자를위한 것입니까 아니면 혼자의 것입니까? 물건을 만들고 자신의 카발을 불러내는 스크립트에'cabal whatever '을 단순히 감쌀 수 있습니다 (해킹 된 경우). 인수를 곧바로 도체 경로로 전달하는 것이 매우 쉽습니다. – jozefg
최종 사용자는 "생산 준비가 된"방법으로 거짓말을합니다. 이러한 스크립트는 최종 사용자에게도 나쁘지는 않지만 - (@RanjitJhala의 대답을 기반으로 한) 기본적으로 가능합니다 :) –