Khi tôi chạy M-x compile
nó sẽ sinh ra một lớp con mới để thực thi lệnh biên dịch của tôi. Ngay khi lệnh biên dịch trở lại, tiến trình shell bị hủy. Tôi có thể thấy lý do tại sao điều này sẽ được mong muốn trong hầu hết các trường hợp, nhưng tôi hiện đang ở trong một tình huống mà nó không hữu ích.
Tôi đang làm việc trong một môi trường xây dựng chuyên biệt ngay bây giờ đòi hỏi tôi phải thực hiện một số bước ban đầu để thiết lập bản dựng trước khi chạy trình biên dịch. Miễn là môi trường vẫn tồn tại, tôi chỉ cần thực hiện các bước thiết lập một lần. Nhưng khi tôi sử dụng M-x compile
nó có nghĩa là tôi phải thực hiện các bước mỗi lần tôi muốn biên dịch hoặc biên dịch lại.
Có cách nào để tôi có thể sinh ra một lớp con sẽ tồn tại trong nền không? Một cái M-x compile
và M-x gdb
có thể sử dụng mỗi lần họ cần chạy tiến trình shell?
Động lực:
Tôi có một chương trình (mà chúng tôi sẽ gọi xcc
) xây dựng mã C cho các nền tảng đặc biệt. Để xây dựng mã của tôi, trước tiên tôi bắt đầu xcc
từ tcsh
dấu nhắc:
$ xcc
Chương trình mất hơn 10 giây để tải và sau đó tôi có thể nhập các lệnh tại dấu nhắc tương tác của nó
xcc>> add target myprogram
xcc>> set source myprogram $PROJDIR/src/
xcc>> set includes myprogram $PROJDIR/include/
xcc>> set type myprogram primitive
xcc>> set inputs myprogram int8,int8
xcc>> set outputs myprogram fix16,fix16
xcc>> build myprogram
Các bước trên có thể được xây dựng thành một macro tùy chỉnh buildmyprog.macro
để tôi có thể chạy nó trực tiếp từ trình bao hoặc từ emacs vớiM-x compile
$ xcc buildmyprog.macro
Vấn đề chính với cách tiếp cận này là thực tế là phải mất xcc
10 giây để tải chương trình, trước khi quá trình biên dịch bắt đầu. Tôi đã quá mệt mỏi khi phải chờ thêm 10 giây mỗi lần tôi biên dịch rằng tôi đã bắt đầu chạy xcc
trong một ansi-term
bộ đệm riêng. Bây giờ sau khi tôi sửa đổi và lưu mã, tôi chuyển sang ansi-term
bộ đệm và chạy
xcc>> build myprogram
Điều này hoạt động tốt, nhưng mỗi khi tôi chuyển sang bộ đệm đó, tôi nghĩ, "Sẽ không hay nếu tôi có thể đẩy F7
và lệnh biên dịch của tôi sẽ được gửi đến phiên bản đã chạy của xcc
?"
comint-send-input
. Về cơ bản, đó là những gì bạn đang làm bằng tay, chuyển đổi nó thành elisp không nên rất khó khăn (đặc biệt là so với việc thiết lập comint).