Когда я запустил cabal build
, cabal проходит процесс компиляции дважды. Поскольку компиляция занимает относительно долгое время (~ 60 секунд), это начинает мешать моему рабочему процессу.Cabal компилирует код дважды
Вот это GHC варианты в моем Кабал файле:
GHC-Options: -O3 -rtsopts -funbox-strict-fields -threaded -Wall -feager-blackholing -fllvm -optlo-O3
if flag(Eventlog)
GHC-Options: -O3 -rtsopts -funbox-strict-fields -threaded -eventlog -Wall
if flag(Profiling)
ghc-prof-options: -O3 -auto-all
GHC-Options: -O3 -rtsopts -funbox-strict-fields -threaded -fprof-auto -Wall
if flag(Dump)
GHC-options: -O3 -funbox-strict-fields -Wall -ddump-simpl -dsuppress-module-prefixes -dsuppress-uniques -ddump-to-file
Выход из cabal build
выглядит совершенно нормально, за исключением компиляции перезагружается, как только последний модуль завершает компиляции в первый раз.
[ 1 of 13] Compiling HaObj (src/HaObj.hs, nothing)
[ 2 of 13] Compiling Surfaces (src/Surfaces.hs, nothing)
[ 3 of 13] Compiling Materials (src/Materials.hs, nothing)
[ 4 of 13] Compiling Geometry3 (src/Geometry3.hs, nothing)
[ 5 of 13] Compiling Triangles (src/Triangles.hs, nothing)
[ 6 of 13] Compiling BoundingVolumeHierarchy (src/BoundingVolumeHierarchy.hs, nothing)
[ 7 of 13] Compiling RayTracer (src/RayTracer.hs, nothing)
[ 8 of 13] Compiling BenchmarkScene5 (src/BenchmarkScene5.hs, nothing)
[ 9 of 13] Compiling BenchmarkScene4 (src/BenchmarkScene4.hs, nothing)
[10 of 13] Compiling BenchmarkScene3 (src/BenchmarkScene3.hs, nothing)
[11 of 13] Compiling BenchmarkScene2 (src/BenchmarkScene2.hs, nothing)
[12 of 13] Compiling BenchmarkScene (src/BenchmarkScene.hs, nothing)
[13 of 13] Compiling Main (src/Main.hs, nothing)
[ 1 of 13] Compiling HaObj (src/HaObj.hs, nothing)
[ 2 of 13] Compiling Surfaces (src/Surfaces.hs, nothing)
[ 3 of 13] Compiling Materials (src/Materials.hs, nothing)
[ 4 of 13] Compiling Geometry3 (src/Geometry3.hs, nothing)
[ 5 of 13] Compiling Triangles (src/Triangles.hs, nothing)
[ 6 of 13] Compiling BoundingVolumeHierarchy (src/BoundingVolumeHierarchy.hs, nothing)
[ 7 of 13] Compiling RayTracer (src/RayTracer.hs, nothing)
[ 8 of 13] Compiling BenchmarkScene5 (src/BenchmarkScene5.hs, nothing)
[ 9 of 13] Compiling BenchmarkScene4 (src/BenchmarkScene4.hs, nothing)
[10 of 13] Compiling BenchmarkScene3 (src/BenchmarkScene3.hs, nothing)
[11 of 13] Compiling BenchmarkScene2 (src/BenchmarkScene2.hs, nothing)
[12 of 13] Compiling BenchmarkScene (src/BenchmarkScene.hs, nothing)
[13 of 13] Compiling Main (src/Main.hs, nothing)
Я использую Ubuntu 14.04, GHC 7.10.1, междусобойчик установке 1.22.4, 1.22.3 междусобойчик библиотека. Вот ссылка link на репо, если вы заинтересованы в попытке воспроизвести. Я бы рекомендовал запустить cabal build --ghc-options="-fno-code"
, чтобы уменьшить время сборки на пару секунд.
EDIT: Zeta указал, что это потому, что у меня есть как исполняемый файл ray-tracer
, так и эталон bench
в моем файле кэша. Есть ли способ построить только один из них? Я пробовал cabal build ray-tracer
, но это также создало обе цели. Я также пробовал cabal configure --disable-benchmarks
. Есть ли способ выборочно построить только одну из целей без реорганизации структуры файла cabal?
Вы, вероятно, есть несколько целей, например, 'executable' и' benchmark'. IIRC, cabal будет строить как по умолчанию. Быстрый просмотр вашего файла '.cabal' показывает, что это, скорее всего, преступник. Вместо этого вы можете создать библиотеку из ваших файлов, отличных от 'Main.hs', и от этого зависит как исходный, так и исполняемый файлы. – Zeta
Почему вы предпочли бы предлагаемое решение «построить только один из них», в предлагаемое решение Zeta, «создать библиотеку и использовать оба исполняемых файла»? –
IIRC, это что-то вроде 'cabal build exe: ray-tracer'. Я не могу проверить, все еще застрял в GHC 7.8.4. – Zeta