common-lisp
बायनेरिज़ बनाना
खोज…
बिल्डिंग बिल्डअप
स्टैंडअलोन कॉमन लिस्प बायनेरिज़ को buildapp
साथ बनाया जा सकता है। इससे पहले कि हम इसे बायनेरिज़ बनाने के लिए उपयोग कर सकें, हमें इसे स्थापित करने और बनाने की आवश्यकता है।
सबसे आसान तरीका है मुझे पता है कि उपयोग कर रहा है quicklisp
और एक कॉमन लिस्प (इस उदाहरण का उपयोग करता है [ sbcl
], लेकिन यह एक फर्क सकें कि आप मिल गया है नहीं करना चाहिए)।
$ sbcl
This is SBCL 1.3.5.nixos, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (ql:quickload :buildapp)
To load "buildapp":
Load 1 ASDF system:
buildapp
; Loading "buildapp"
(:BUILDAPP)
* (buildapp:build-buildapp)
;; loading system "buildapp"
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into /home/inaimathi/buildapp:
writing 4800 bytes from the read-only space at 0x20000000
writing 3216 bytes from the static space at 0x20100000
writing 47349760 bytes from the dynamic space at 0x1000000000
done]
NIL
* (quit)
$ ls -lh buildapp
-rwxr-xr-x 1 inaimathi inaimathi 46M Aug 13 20:12 buildapp
$
एक बार जब आपके पास वह बाइनरी निर्मित हो जाता है, तो आप इसका उपयोग अपने सामान्य लिस्प कार्यक्रमों के बायनेरिज़ के निर्माण के लिए कर सकते हैं। आप इस बहुत कुछ कर करना चाहते हैं, तो आप भी शायद इसे कहीं अपने पर रखना चाहिए PATH
इतना है कि तुम सिर्फ साथ चला सकते हैं buildapp
किसी भी निर्देशिका से।
बिल्डअप हैलो वर्ल्ड
सबसे सरल संभव बाइनरी जिसे आप बना सकते हैं
- कोई निर्भरता नहीं है
- कोई कमांड लाइन तर्क नहीं देता है
- बस लिखते हैं "हैलो वर्ल्ड!"
stdout
buildapp
बाद, आप बस ...
$ buildapp --eval '(defun main (argv) (declare (ignore argv)) (write-line "Hello, world!"))' --entry main --output hello-world
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into hello-world:
writing 4800 bytes from the read-only space at 0x20000000
writing 3216 bytes from the static space at 0x20100000
writing 43220992 bytes from the dynamic space at 0x1000000000
done]
$ ./hello-world
Hello, world!
$
बिल्डअप हैलो वेब वर्ल्ड
एक अधिक यथार्थवादी उदाहरण में एक ऐसी परियोजना शामिल है जिसे आप डिस्क पर कई फाइलों के साथ बना रहे हैं (बजाय एक --eval
लिए buildapp
गए - --eval
विकल्प से), और खींचने के लिए कुछ निर्भरताएं।
चूँकि asdf
सिस्टम को खोजने और लोड करने के दौरान मनमानी चीजें हो सकती हैं (अन्य लोडिंग, संभावित असंबंधित सिस्टम सहित), यह सिर्फ उन प्रोजेक्ट्स की asd
फाइलों का निरीक्षण करने के लिए पर्याप्त नहीं है जिन पर आप निर्भर हैं ताकि आपको पता चल सके कि आपको क्या लोड करने की आवश्यकता है । सामान्य दृष्टिकोण का उपयोग है quicklisp
लक्ष्य प्रणाली लोड करने के लिए है, तो फोन ql:write-asdf-manifest-file
कि लोड है सब कुछ का एक पूरा प्रकट को लिखने के लिए।
यहां एक खिलौना प्रणाली बनाई गई है जो hunchentoot
साथ चित्रण करती है कि व्यवहार में कैसे हो सकता है:
;;;; buildapp-hello-web-world.asd
(asdf:defsystem #:buildapp-hello-web-world
:description "An example application to use when getting familiar with buildapp"
:author "inaimathi <[email protected]>"
:license "Expat"
:depends-on (#:hunchentoot)
:serial t
:components ((:file "package")
(:file "buildapp-hello-web-world"))
;;;; package.lisp
(defpackage #:buildapp-hello-web-world
(:use #:cl #:hunchentoot))
;;;; buildapp-hello-web-world.lisp
(in-package #:buildapp-hello-web-world)
(define-easy-handler (hello :uri "/") ()
(setf (hunchentoot:content-type*) "text/plain")
"Hello Web World!")
(defun main (argv)
(declare (ignore argv))
(start (make-instance 'easy-acceptor :port 4242))
(format t "Press any key to exit...~%")
(read-char))
;;;; build.lisp
(ql:quickload :buildapp-hello-web-world)
(ql:write-asdf-manifest-file "/tmp/build-hello-web-world.manifest")
(with-open-file (s "/tmp/build-hello-web-world.manifest" :direction :output :if-exists :append)
(format s "~a~%" (merge-pathnames
"buildapp-hello-web-world.asd"
(asdf/system:system-source-directory
:buildapp-hello-web-world))))
#### build.sh
sbcl --load "build.lisp" --quit
buildapp --manifest-file /tmp/build-hello-web-world.manifest --load-system hunchentoot --load-system buildapp-hello-web-world --output hello-web-world --entry buildapp-hello-web-world:main
एक बार जब आपके पास buildapp-hello-web-world
नामक निर्देशिका में उन फ़ाइलों को सहेजा जाता है, तो आप कर सकते हैं
$ cd buildapp-hello-web-world/
$ sh build.sh
This is SBCL 1.3.7.nixos, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
To load "cffi":
Load 1 ASDF system:
cffi
; Loading "cffi"
........
To load "buildapp-hello-web-world":
Load 1 ASDF system:
buildapp-hello-web-world
; Loading "buildapp-hello-web-world"
....
;; loading system "cffi"
;; loading system "hunchentoot"
;; loading system "buildapp-hello-web-world"
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into hello-web-world:
writing 4800 bytes from the read-only space at 0x20000000
writing 4624 bytes from the static space at 0x20100000
writing 66027520 bytes from the dynamic space at 0x1000000000
done]
$ ls -lh hello-web-world
-rwxr-xr-x 1 inaimathi inaimathi 64M Aug 13 21:17 hello-web-world
यह एक द्विआधारी पैदा करता है जो ठीक वैसा ही करता है जैसा आपको लगता है कि ऊपर दिया जाना चाहिए।
$ ./hello-web-world
Press any key to exit...
फिर आपको एक और शेल फायर करने में सक्षम होना चाहिए, curl localhost:4242
और Hello Web World!
की स्पष्ट प्रतिक्रिया देखें Hello Web World!
छप जाओ।