Myślałem, że już będzie pytanie na ten temat, ale nie mogę znaleźć.GHC: wstaw datę kompilacji
Chcę, aby mój program wydrukował datę, w której został skompilowany. Jak najłatwiej to ustawić?
Mogę wymyślić kilka możliwości, ale żadne z nich nie jest tak proste, jak to można nazwać "łatwym". Idealnie chciałbym móc po prostu zrobić ghc --make Foo
i mieć Foo
wydrukować datę kompilacji za każdym razem, gdy go uruchomię.
Różne non-Easy możliwości, które przychodzi na myśl:
Learn Template Haskell. Dowiedz się, jak użyć
Data.Time
, aby pobrać dzisiejszą datę. Znajdź sposób przekształcenia tego w ciąg znaków. (Teraz mój program wymaga TH do działania, muszę też przekonać go, aby za każdym razem przekompilować ten moduł, w przeciwnym razie otrzymam datę kompilacji dla tego modułu [który nigdy się nie zmienia] zamiast całego programu.)Napisz skrypt powłoki, który generuje maleńki moduł Haskell zawierający datę systemową. (Teraz muszę użyć tego skryptu powłoki zamiast skompilować mój program bezpośrednio. Również, skrypty powłoki Windows pozostawia znacznie do życzenia!)
usiąść i napisać trochę kodu Haskell, który generuje mały moduł Haskell zawierającego data. (Bardziej przenośny niż poprzedni pomysł - ale nadal wymaga dodatkowych kroków konstrukcyjnych lub drukowana data będzie niepoprawna).
Może być jakiś sposób, aby to zrobić przez Cabal - ale czy naprawdę chcę spakować ten mały program po prostu uzyskać termin obiektu?
Czy ktoś ma jakieś prostsze sugestie?
Alias ghc na coś podobnego do '' ghc -DNOW = "\" 'date' \" "' '(nie mam pojęcia jak to by wyglądało na powłokę Windows), aw twoim module użyj' {- # LANGUAGE CPP # -} 'i' now = NOW' dla ciągu daty. Brzydki hack, może być na tyle brzydki, by popchnąć cię do czystszej alternatywy, która wymaga więcej pracy. –
@DanielFischer Najwyraźniej powłoka systemu Windows nie ma możliwości ustawienia zmiennej z wyjścia polecenia. Zamiast tego musisz użyć hacka z 'SET/P VAR =', który odczytuje tekst ze standardowego wejścia. Jeśli wyprowadzasz dane wyjściowe polecenia do pliku, a następnie ponownie je z powrotem, możesz osiągnąć pożądany efekt ... ale JEZUS !! > _ < – MathematicalOrchid
Och, wow. Czy nawet PowerShell nie ma takiej możliwości? –