Автоматизация сборки для файлов AutoCAD Lisp

У меня огромный LISP проект, я сделал prv файл, который разрешает VLIDE собрать этот проект в единый vlx файл (он также компилирует fas файл). Проблема в том, что невозможно скомпилировать проект из-за пределов AutoCAD или из командной строки, поэтому я не могу автоматизировать vlx построение с использованием сценария.

Вопрос: есть ли способ сделать это? Могу ли я скомпилировать fas-vlx снаружи автокад? Или я могу запустить AutoCAD, давая скрипт, который компилирует prv а потом закрывает автокад?

5 ответов

Имейте в виду, что это немного Рубе Голдберг. но это работает!

Я буду демонстрировать с Autocad 2014.

Сначала вам нужно будет создать файл сценария Autocad, содержащий недокументированные команды. Я назвал мой build.scr

(Обратите внимание, что vlisp-compile-list нигде не документировано. Если вы найдете документацию, пожалуйста, дайте мне знать!)

vlide
(
  vlisp-compile-list 
    'st 
    (
      list 
        (strcat (getenv "UserProfile") "\\Documents\\AutocadFiles\\gui.lsp"))
            ...

    ) 
  (strcat (getenv "UserProfile") "\\Documents\\AutocadFiles\\CompiledLisp.fas")
)

Затем создайте командный файл, который содержит это:

@echo off
cd c:\Program Files\Autodesk\AutoCAD 2014
start acad.exe /b build.scr

Запускает AutoCAD и запускает указанный скрипт

Далее вам нужно будет скачать и установить AutoHotKey

и создайте для него скрипт:

Run, BuildLisp.bat

sleep, 30000

WinActivate, Autodesk AutoCAD 2014 - [Drawing1.dwg]

WinActivate, Visual LISP for AutoCAD <Drawing1.dwg>

WinActivate, Autodesk AutoCAD 2014 - [Drawing1.dwg]

sleep, 10000

WinClose, Autodesk AutoCAD 2014 - [Drawing1.dwg]

Когда вы активируете этот скрипт. Он должен открыть AutoCAD и собрать все ваши файлы LSP в один.FAS, а затем закрыть.

Что стоит отметить. Визуальный редактор LISP должен быть открыт для компиляции. Компиляция будет происходить только при активации окна.

Если кто-нибудь найдет лучший способ. Пожалуйста, дай мне знать!

Вы должны запустить AutoCAD, но, несмотря на это, он становится сложным, поскольку требует использования недокументированных функций.

После некоторых тестов я наконец смог сделать его немного быстрее и проще в использовании.

В командной строке вызовите autocad с некоторыми ключами запуска. Вам понадобится пустой рисунок, назовите его dummy.dwg. /b обозначает скрипт, который вы запустите:

"C:\Program Files\Autodesk\AutoCAD 2019\acad.exe" "C:\somefolder\dummy.dwg" /nologo /nossm /b "C:\somefolder\CompileLispProjects.scr"

Внутри файла.scr:

;;MAKE VLISP OPEN BUT LET AUTOCAD ACTIVE. YOU NEED VLISP OPEN TO LOAD VLISP-* FUNCTIONS
(C:VLIDE T)

;; TRY TO RUN VLISP-MAKE-PROJECT FUNCTION
(setq errobj (vl-catch-all-apply 'function-which-will-use-vlisp-make-project-fas))

;; IF ANY ERROR COMES OUT, STOP AND ALERT
(if (vl-catch-all-error-p errobj)
  (progn
    (princ "\n***ERROR COMPILING SOMETHING***\n")
    (princ (vl-catch-all-error-message errobj))
    (princ)
  );_progn

  ;; ALL GOOD, QUIT AUTOCAD
  (progn
    ;; THERE'S A SAFE LOCK IN QUIT COMMAND, SO SAVE A DUMMY FILE AND QUIT AGAIN WITH IT SAVED
    (command-s "._QUIT" "_N" "")
    (command-s "._QUIT" "")
  );_progn
);_if

;; IT'S IMPORTANT TO HAVE THE LAST LINE EMPTY (<ENTER>)

Уловка в этом коде (C:VLIDE T), Это не задокументировано, и я нашел его, потому что я знаю, что в AutoLISP много недокументированных функций. Попробуйте это с nil также вы увидите, что VisualLISP будет активным окном, блокирующим ваш AutoCAD для выполнения следующих команд (и поэтому вам нужно будет щелкнуть где-нибудь в AutoCAD, чтобы активировать его окно и заставить код работать правильно).

Примечание. Когда AutoCAD закрывается, возможно, ваше окно VisualLISP задержится на некоторое время, не пытайтесь его активировать. Пусть это будет на несколько секунд, и оно закроется само собой.

Я покопался, проверил ли ты эту ссылку

http://www.thefreecountry.com/compilers/commonlisp.shtml

Если главной целью является оптимизация и защита исходного кода, вот проект с открытым исходным кодом, который позаботится об этом:

http://www.lt-extender.com/LT-Extender/englisch/default.htm

Другие вопросы по тегам