Thứ ba, 07/01/2014 | 00:00 GMT+7

Cách sử dụng Makefiles để tự động hóa các tác vụ lặp đi lặp lại trên Ubuntu VPS

Nếu bạn có kinh nghiệm cài đặt phần mềm từ mã nguồn trên server Linux của bạn , có thể bạn đã sử dụng trình make . Công cụ này chủ yếu được sử dụng để tự động hóa việc biên dịch và xây dựng chương trình. Nó cho phép tác giả của ứng dụng dễ dàng đặt ra các bước cần thiết để xây dựng dự án cụ thể đó.


Mặc dù make được tạo ra để tự động hóa việc biên dịch phần mềm, công cụ này đã được thiết kế theo kiểu đủ linh hoạt để có thể sử dụng để tự động hóa hầu hết mọi tác vụ mà bạn có thể thực hiện từ dòng lệnh. Trong hướng dẫn này, ta sẽ thảo luận về cách bạn có thể sử dụng lại chế độ để tự động hóa các việc lặp đi lặp lại diễn ra theo trình tự.

Ta sẽ trình bày điều này trên VPS Ubuntu 12.04, nhưng nó sẽ hoạt động theo cách tương tự trên hầu hết mọi server Linux.

Cài đặt Make


Trước khi bắt đầu sử dụng make, ta cần cài đặt nó.

Mặc dù ta có thể cài đặt theo tên, nhưng nó thường được cài đặt cùng với các công cụ khác giúp bạn biên dịch phần mềm. Ta sẽ cài đặt tất cả những thứ này vì nhìn chung chúng vô cùng hữu ích. Có một gói được gọi là "build-essential" chứa make và các chương trình khác sau:

sudo apt-get update sudo apt-get install build-essential 

Đến đây bạn có các công cụ cho phép bạn tận dụng lợi thế của nó trong khả năng thông thường của nó.

Hiểu Makefiles


Cách chính mà lệnh make nhận hướng dẫn là thông qua việc sử dụng Makefile .

Từ trang hướng dẫn, ta có thể thấy rằng make sẽ tìm kiếm một file có tên GNUmakefile, sau đó makefile, rồi Makefile. Nó khuyên bạn nên sử dụng Makefile, vì GNUmakefile dành cho các lệnh dành riêng cho GNU, và makefile không nổi bật lắm.

Makefiles là folder cụ thể, nghĩa là make sẽ tìm kiếm trong folder nơi nó được gọi để tìm các file này. Như vậy, ta nên đặt Makefile trong folder root của bất kỳ tác vụ nào mà ta sẽ thực hiện hoặc nơi hợp lý nhất để gọi các script mà ta sẽ viết.

Bên trong Makefile, ta tuân theo một định dạng cụ thể. Sử dụng các khái niệm về mục tiêu, nguồn và lệnh theo cách này:

target: source     command 

Căn chỉnh và định dạng của điều này là rất quan trọng, bởi vì thực hiện là cầu kỳ. Ta sẽ thảo luận về định dạng và ý nghĩa của từng thành phần này tại đây:

Mục tiêu


Đích là tên do user chỉ định để tham chiếu đến một group lệnh. Hãy coi nó tương tự như một hàm đơn giản trong ngôn ngữ lập trình.

Mục tiêu được căn chỉnh trên cột bên trái, là một từ liên tục (không có dấu cách) và kết thúc bằng dấu hai chấm (:).

Khi gọi make, ta có thể chỉ định mục tiêu bằng lệnh :

<pre>
make <span class = “highlight”> target_name </span>
</pre>

Sau đó, Make sẽ kiểm tra Makefile và thực hiện các lệnh liên quan đến mục tiêu đó.

Nguồn


Nguồn là các tham chiếu đến file hoặc các mục tiêu khác. Chúng đại diện cho các yêu cầu hoặc phụ thuộc cho mục tiêu mà chúng được liên kết.

Ví dụ: bạn có thể có một phần trong file tạo của bạn trông giống như sau:

target1: target2     target1_command  target2:     target2_command 

Trong ví dụ này, ta có thể gọi target1 như sau:

make target1 

Sau đó, Make sẽ chuyển đến Makefile và tìm kiếm mục tiêu “target1”. Sau đó, nó sẽ kiểm tra xem có bất kỳ nguồn nào được chỉ định hay không.

Nó sẽ tìm dependencies nguồn “target2” và tạm thời chuyển đến mục tiêu đó.

Từ đó, nó sẽ kiểm tra xem target2 có bất kỳ nguồn nào được liệt kê hay không. Nó không, vì vậy nó sẽ tiếp tục thực hiện " lệnh target2 ". Đến đây, make sẽ đến cuối danh sách lệnh “target2” và chuyển quyền điều khiển trở lại mục tiêu “target1”. Sau đó, nó sẽ thực hiện “ lệnh target1 ” và thoát.

Nguồn có thể là file hoặc chính mục tiêu. Sử dụng dấu thời gian file để xem liệu file có bị thay đổi kể từ lần gọi cuối cùng hay không. Nếu một thay đổi đối với file nguồn đã được thực hiện, mục tiêu đó sẽ được chạy lại. Nếu không, nó đánh dấu phần phụ thuộc là đã hoàn thành và tiếp tục đến nguồn tiếp theo hoặc các lệnh nếu đó là nguồn duy nhất.

Ý tưởng chung là bằng cách thêm nguồn, ta có thể xây dựng một tập hợp tuần tự các phụ thuộc phải được thực thi trước đích hiện tại. Bạn có thể chỉ định nhiều nguồn, được phân tách bằng dấu cách, sau bất kỳ mục tiêu nào. Bạn có thể bắt đầu thấy cách bạn có thể chỉ định các chuỗi nhiệm vụ phức tạp.

Lệnh


Điều làm cho lệnh make linh hoạt như vậy là phần lệnh của cú pháp rất mở. Bạn có thể chỉ định bất kỳ lệnh nào bạn muốn chạy dưới mục tiêu. Bạn có thể thêm bao nhiêu lệnh tùy thích.

Các lệnh được chỉ định trên dòng sau khai báo đích. Chúng được thụt vào bởi một ký tự tab . Một số version của make linh hoạt về cách bạn thụt lề phần lệnh, nhưng nói chung, bạn nên gắn bó với một tab duy nhất đảm bảo rằng make sẽ nhận ra ý định của bạn.

Make coi mọi dòng thụt vào trong định nghĩa đích là một lệnh riêng biệt. Bạn có thể thêm bao nhiêu dòng và lệnh thụt lề tùy thích. Make sẽ đơn giản lướt qua chúng từng cái một.

Có một số điều mà ta có thể đặt trước các lệnh để yêu cầu thực hiện xử lý chúng theo cách khác:

  • - : Dấu gạch ngang trước lệnh yêu cầu lệnh make không hủy bỏ nếu gặp lỗi. Ví dụ, điều này có thể hữu ích nếu bạn muốn thực hiện một lệnh trên một file nếu nó có mặt và không làm gì nếu nó không có.

  • @ : Nếu bạn dẫn một lệnh có ký hiệu “@”, bản thân lệnh gọi sẽ không được in ra kết quả chuẩn. Điều này chủ yếu được sử dụng chỉ để làm sạch kết quả tạo ra sản phẩm.

Tính năng bổ sung


Một số tính năng bổ sung có thể giúp bạn tạo chuỗi luật phức tạp hơn trong Makefile của bạn .

Biến


Make nhận dạng các biến (hoặc macro), hoạt động như các trình giữ chỗ đơn giản để thay thế trong make file . Tốt nhất là khai báo những điều này ở đầu file của bạn.

Tên của mỗi biến được viết hoa hoàn toàn. Theo sau tên, một dấu bằng sẽ gán tên cho giá trị ở phía bên phải. Ví dụ: nếu ta muốn xác định một folder cài đặt là /usr/bin , ta có thể thêm cái này vào đầu file :

INSTALLDIR=/usr/bin 

Sau đó trong file , ta có thể tham chiếu vị trí này bằng cách sử dụng cú pháp sau:

$(INSTALLDIR) 

Escape Newlines


Một điều hữu ích khác mà ta có thể làm là cho phép các lệnh kéo dài nhiều dòng.

Ta có thể sử dụng bất kỳ lệnh hoặc chức năng shell nào trong phần lệnh. Điều này bao gồm việc thoát các ký tự dòng mới bằng cách kết thúc dòng bằng “":

target: source     command1 arg1 arg2 arg3 arg4 \     arg5 arg6 

Điều này trở nên quan trọng hơn nếu bạn tận dụng một số chức năng lập trình hơn của shell, như câu lệnh if-then:

target: source     if [ "condition_1" == "condition_2" ];\     then\         command to execute;\         another command;\     else\         alternative command;\     fi 

Điều này sẽ thực hiện khối này như thể nó là một lệnh một dòng. Trên thực tế, ta có thể viết điều này thành một dòng, nhưng nó cải thiện khả năng đọc đáng kể khi chia nhỏ nó ra như thế này.

Nếu bạn định thoát khỏi các ký tự cuối dòng, hãy chắc chắn không có bất kỳ dấu cách hoặc tab thừa nào sau dấu "", nếu không bạn sẽ gặp lỗi.

Luật hậu tố file


Một tính năng bổ sung mà bạn có thể sử dụng nếu đang xử lý file là hậu tố file . Đây là những luật chung cung cấp cách xử lý file dựa trên phần mở rộng của chúng.

Ví dụ: nếu bạn muốn xử lý tất cả các file .jpg trong một folder và chuyển đổi chúng thành file .png bằng bộ ImageMagick, ta có thể có thông tin như thế này trong Makefile của ta :

.SUFFIXES: .jpg .png  .jpg.png:     @echo converting $< to $@     convert $< $@ 

Có một số điều ta cần xem xét ở đây.

Phần đầu tiên là khai báo .SUFFIXES: Điều này cho biết về tất cả các hậu tố ta sẽ sử dụng trong các hậu tố file . Một số hậu tố thường được sử dụng trong việc biên dịch mã nguồn, như file “.c” và “.o” được bao gồm theo mặc định và không cần phải gắn nhãn trong khai báo này.

Phần tiếp theo là phần khai báo luật hậu tố thực tế. Về cơ bản, điều này có dạng:

<pre>
<span class = “highlight”> tiện ích mở rộng ban đầu </span>. <span class = “highlight”> tiện ích mở rộng mục tiêu </span>:
</pre>

Đây không phải là mục tiêu thực tế, nhưng nó sẽ trùng với bất kỳ lệnh gọi nào cho các file có phần mở rộng thứ hai và xây dựng chúng từ file trong phần mở rộng đầu tiên.

Trong trường hợp của ta , ta có thể gọi make như thế này để tạo một file có tên “file.png” nếu có “file.jpg” trong folder của ta :

make file.png 

Make sẽ thấy file png trong khai báo .SUFFIXES và xem luật tạo file “.png”. Sau đó, nó sẽ tìm kiếm file đích có “.png” được thay thế bằng “.jpg” trong folder . Sau đó, nó sẽ thực hiện các lệnh tiếp theo.

Các luật hậu tố sử dụng một số biến mà ta chưa được giới thiệu. Những điều này giúp tạo ra các thông tin thay thế khác nhau dựa trên phần nào của quá trình mà nó hiện đang trong:

  • $? : Biến này chứa danh sách các phụ thuộc cho mục tiêu hiện tại mới hơn mục tiêu. Đây sẽ là các mục tiêu phải được thực hiện lại trước khi thực hiện các lệnh trong mục tiêu này.

  • $ @ : Biến này là tên của mục tiêu hiện tại. Điều này cho phép ta tham chiếu file bạn đang cố gắng tạo, mặc dù luật này được khớp thông qua một mẫu.

  • $ < : Đây là tên của phụ thuộc hiện tại. Trong trường hợp luật hậu tố, đây là tên của file được sử dụng để tạo đích. Trong ví dụ của ta , điều này sẽ chứa “file.jpg”

  • $ * : Tệp này là tên của phần phụ thuộc hiện tại với phần mở rộng phù hợp bị loại bỏ. Hãy coi đây là giai đoạn trung gian giữa file đích và file nguồn.

Tạo một Makefile chuyển đổi


Ta sẽ tạo một Makefile để thực hiện một số thao tác hình ảnh và sau đó tải các file lên server file của ta , để trang web của ta có thể hiển thị chúng.

Nếu bạn muốn làm theo, trước khi bắt đầu, hãy download các công cụ chuyển đổi ImageMagick. Đây là những công cụ dòng lệnh dễ dàng để thao tác hình ảnh và ta sẽ sử dụng chúng trong tập lệnh của bạn :

sudo apt-get update sudo apt-get install imagemagick 

Trong folder hiện tại của bạn, hãy tạo một file có tên Makefile :

nano Makefile 

Trong file này, ta sẽ bắt đầu thực hiện các mục tiêu chuyển đổi của bạn .

Chuyển đổi tất cả các file JPG sang PNG


Server của ta đã được cài đặt để phục vụ riêng hình ảnh .png. Do đó, ta cần chuyển đổi các file .jpg nào thành .png trước khi tải lên.

Như ta đã học ở trên, luật hậu tố là một cách tốt để làm điều này. Ta sẽ bắt đầu với khai báo .SUFFIX sẽ liệt kê các định dạng mà ta đang chuyển đổi giữa:

.SUFFIXES: .jpg .png 

Sau đó, ta có thể tạo một luật sẽ thay đổi file .jpg thành file .png. Ta có thể thực hiện việc này bằng cách sử dụng lệnh convert từ bộ ImageMagick. Lệnh convert rất đơn giản và cú pháp của nó là:

<pre>
chuyển đổi <span class = “highlight”> từ tệp này sang file khác </span>
</pre>

Để triển khai lệnh này, ta cần luật hậu tố chỉ định định dạng mà ta đang bắt đầu và định dạng ta đang kết thúc bằng:

.SUFFIXES: .jpg .png  .jpg.png:           ## This is the suffix rule declaration 

Bây giờ ta có luật sẽ khớp, ta cần thực hiện bước chuyển đổi thực tế.

Bởi vì ta không biết chính xác tên file sẽ được khớp ở đây, ta cần sử dụng các biến mà ta đã học. Cụ thể, ta cần tham chiếu $< làm file root và $@ là file ta đang chuyển đổi sang. Nếu ta kết hợp điều này với những gì ta biết về lệnh convert, ta nhận được luật này:

.SUFFIXES: .jpg .png  .jpg.png:     convert $< $@ 

Hãy thêm một số chức năng để ta có thể biết rõ ràng điều gì đang xảy ra với một câu lệnh echo. Ta sẽ bao gồm biểu tượng “@” trước lệnh mới và lệnh mà ta đã có để ngăn lệnh thực sự được in khi nó được thực thi:

<pre>
.SUFFIXES: .jpg .png

.jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Lúc này, ta nên lưu file để có thể chạy thử.

Lấy một file jpg vào folder hiện tại. Nếu bạn không có file trong tay, bạn có thể lấy một file từ trang web DigitalOcean bằng lệnh :

wget https://digitalocean.com/assets/v2/badges/digitalocean-badge-blue.jpg mv digitalocean-badge-blue.jpg badge.jpg 

Bạn có thể kiểm tra xem file thực hiện của bạn có hoạt động hay không bằng cách yêu cầu file tạo file huy badge.png :

make badge.png 

converting badge.jpg to badge.png using ImageMagick... conversion to badge.png successful! 

Make sẽ chuyển đến Makefile, xem .png trong khai báo .SUFFIXES và sau đó đi tới luật hậu tố phù hợp. Sau đó, nó chạy các lệnh được liệt kê.

Tạo danh sách file


Đến đây, make có thể tạo file .png nếu ta nói rõ với nó rằng ta muốn file đó.

Sẽ tốt hơn nếu nó chỉ tạo một danh sách các file .jpg trong folder hiện tại và sau đó chuyển đổi chúng. Ta có thể làm điều này bằng cách tạo một biến chứa tất cả các file của ta sẽ được chuyển đổi.

Cách tốt nhất để thực hiện việc này là sử dụng lệnh ký tự đại diện:

JPG_FILES=$(wildcard *.jpg) 

Ta chỉ có thể chỉ định một mục tiêu bằng ký tự đại diện bash như sau:

JPG_FILES=*.jpg 

Nhưng điều này có một thiếu sót. Nếu không có file .jpg, điều này thực sự cố gắng chạy các lệnh chuyển đổi trên file có tên “* .jpg”, file này sẽ không thành công.

Cú pháp ký tự đại diện mà ta đã đề cập ở trên biên soạn một danh sách các file .jpg trong folder hiện tại và nếu không có file nào tồn tại, nó không đặt biến thành bất kỳ thứ gì.

Trong khi thực hiện việc này, ta nên cố gắng xử lý một biến thể nhỏ trong các file .jpg thường gặp. Các file hình ảnh này thường được thấy với phần mở rộng .jpeg thay vì .jpg. Để xử lý những điều này một cách lành mạnh, ta có thể thay đổi tên của chúng trong chương trình của bạn thành file .jpg, để các dòng xử lý của ta đơn giản hơn:

Thay vì các dòng trên, ta sẽ sử dụng hai dòng sau:

JPEG=$(wildcard *.jpg *.jpeg)     ## Has .jpeg and .jpg files JPG=$(JPEG:.jpeg=.jpg)            ## Only has .jpg files 

Dòng đầu tiên biên dịch danh sách các file .jpg và .jpeg trong folder hiện tại và lưu trữ chúng trong một biến có tên là JPEG .

Dòng thứ hai tham chiếu đến biến này và thực hiện một bản dịch tên đơn giản để chuyển đổi các tên trong biến JPEG kết thúc bằng .jpeg thành các tên kết thúc bằng .jpg. Điều này được thực hiện với cú pháp này:

$(VARNAME:.convert_from=.convert_to) 

Ở cuối hai dòng này, ta sẽ có một biến mới gọi là JPG chỉ chứa các tên file .jpg. Một số file trong số này có thể không thực sự tồn tại trên hệ thống, vì chúng thực sự là file .jpeg (không thực hiện đổi tên thực tế). Điều này không sao vì ta chỉ sử dụng danh sách này để tạo danh sách mới các file .png mà ta muốn tạo:

JPEG=$(wildcard *.jpg *.jpeg) JPG=$(JPEG:.jpeg=.jpg) PNG=$(JPG:.jpg=.png) 

Bây giờ, ta có một danh sách các file ta muốn yêu cầu trong biến PNG . Danh sách này chỉ chứa các tên file .png, vì ta đã thực hiện chuyển đổi tên khác. Bây giờ, mọi file là file .jpg hoặc .jpeg trong folder này đã được sử dụng để biên dịch danh sách file .png mà ta muốn tạo.

Ta cũng cần cập nhật khai báo .SUFFIXES và luật hậu tố để phản ánh rằng ta hiện đang xử lý file .jpeg:

JPEG=$(wildcard *.jpg *.jpeg) JPG=$(JPEG:.jpeg=.jpg) PNG=$(JPG:.jpg=.png) .SUFFIXES: .jpg .jpeg .png  .jpeg.png .jpg.png:     @echo converting $< to $@ using ImageMagick...     @convert $< $@     @echo conversion to $@ successful! 

Như bạn thấy , ta đã thêm .jpeg vào danh sách hậu tố và cũng bao gồm một đối sánh hậu tố khác cho luật của ta .

Tạo một số mục tiêu


Ta có khá nhiều trong Makefile của bạn ngay bây giờ, nhưng ta chưa có bất kỳ mục tiêu bình thường nào. Hãy khắc phục điều đó để ta có thể chuyển danh sách PNG mình sang luật hậu tố:

<pre>
JPEG = $ (ký tự đại diện * .jpg * .jpeg)
JPG = $ (JPEG: .jpeg = .jpg)
PNG = $ (JPG: .jpg = .png)
.SUFFIXES: .jpg .jpeg .png

<span class = “highlight”> chuyển đổi: $ (PNG) </span>

.jpeg.png .jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Tất cả những gì mục tiêu mới này làm là liệt kê các tên file .png mà ta đã thu thập theo yêu cầu. Sau đó, hãy xem liệu có cách nào để nó có thể lấy các file .png và sử dụng luật hậu tố để thực hiện không.

Bây giờ, ta có thể chỉ cần sử dụng lệnh này để chuyển đổi tất cả các file .jpg và .jpeg của ta thành file .png:

make convert 

Hãy thêm một mục tiêu khác. Một nhiệm vụ khác thường được thực hiện khi tải hình ảnh lên server là thay đổi kích thước của chúng. Có kích thước hình ảnh chính xác sẽ giúp user của bạn không phải thay đổi kích thước hình ảnh nhanh chóng khi họ yêu cầu.

Một lệnh ImageMagick được gọi là mogrify có thể thay đổi kích thước hình ảnh theo cách mà ta cần. Giả sử khu vực mà hình ảnh của ta sẽ được hiển thị trên trang web của ta rộng 500px. Ta có thể chuyển đổi vùng này bằng lệnh:

mogrify -resize 500\> file.png 

Thao tác này sẽ thay đổi kích thước bất kỳ hình ảnh nào có chiều rộng lớn hơn 500px để vừa với khu vực này, nhưng sẽ không chạm vào hình ảnh nhỏ hơn. Đây là những gì ta muốn. Như một mục tiêu, ta có thể thêm luật này:

<pre>
thay đổi kích thước: $ (PNG)
@echo đang đổi kích thước file …
@mogrify -resize 648> $ (PNG)
@echo thay đổi kích thước đã hoàn tất!
</pre>

Ta có thể thêm cái này vào file của bạn như sau:

<pre>
JPEG = $ (ký tự đại diện * .jpg * .jpeg)
JPG = $ (JPEG: .jpeg = .jpg)
PNG = $ (JPG: .jpg = .png)
.SUFFIXES: .jpg .jpeg .png

chuyển đổi: $ (PNG)

<span class = “highlight”> thay đổi kích thước: $ (PNG) </span>
<span class = “highlight”> @ echo thay đổi kích thước file … </span>
<span class = “highlight”> @ mogrify -resize 648> $ (PNG) </span>
<span class = “highlight”> @ echo thay đổi kích thước đã hoàn tất! </span>

.jpeg.png .jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Bây giờ, ta có thể xâu chuỗi hai mục tiêu này lại với nhau dưới dạng phụ thuộc của một mục tiêu khác:

<pre>
JPEG = $ (ký tự đại diện * .jpg * .jpeg)
JPG = $ (JPEG: .jpeg = .jpg)
PNG = $ (JPG: .jpg = .png)
.SUFFIXES: .jpg .jpeg .png

<span class = “highlight”> webify: chuyển đổi thay đổi kích thước </span>

chuyển đổi: $ (PNG)

thay đổi kích thước: $ (PNG)
@echo đang đổi kích thước file …
@mogrify -resize 648> $ (PNG)
@echo thay đổi kích thước đã hoàn tất!

.jpeg.png .jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Bạn có thể nhận thấy rằng thay đổi kích thước ngầm định sẽ chạy các lệnh tương tự như chuyển đổi. Ta sẽ chỉ định cả hai mặc dù trong trường hợp không phải lúc nào cũng vậy. Trong tương lai, quá trình chuyển đổi có thể chứa nhiều quy trình xử lý phức tạp hơn.

Mục tiêu webify hiện chuyển đổi và thay đổi kích thước hình ảnh.

Tải file lên server từ xa


Bây giờ ta đã có hình ảnh sẵn sàng cho web, ta có thể tạo mục tiêu để tải chúng lên folder hình ảnh tĩnh trên server của ta . Ta có thể làm điều này bằng cách chuyển danh sách các file đã chuyển đổi của ta sang scp :

Mục tiêu của ta sẽ trông giống như sau:

<pre>
tải lên: webify
scp $ (PNG) root @ <span class = “highlight”> ip_address </span>: <span class = “highlight”> / path / to / static / images </span>
</pre>

Thao tác này sẽ tải tất cả các file của ta lên server từ xa. Tệp của ta bây giờ trông như thế này:

<pre>
JPEG = $ (ký tự đại diện * .jpg * .jpeg)
JPG = $ (JPEG: .jpeg = .jpg)
PNG = $ (JPG: .jpg = .png)
.SUFFIXES: .jpg .jpeg .png

<span class = “highlight”> tải lên: webify </span>
<span class = “highlight”> scp $ (PNG) root @ ip_address: / path / to / static / images </span>

webify: chuyển đổi thay đổi kích thước

chuyển đổi: $ (PNG)

thay đổi kích thước: $ (PNG)
@echo đang đổi kích thước file …
@mogrify -resize 648> $ (PNG)
@echo thay đổi kích thước đã hoàn tất!

.jpeg.png .jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Dọn dẹp


Hãy thêm tùy chọn dọn dẹp để loại bỏ tất cả các file .png local sau khi chúng được tải lên server từ xa:

<pre>
dọn dẹp:
rm * .png
</pre>

Bây giờ, ta có thể thêm một mục tiêu khác ở trên cùng, mục tiêu này gọi mục tiêu này sau khi ta tải file của bạn lên server từ xa. Đây sẽ là mục tiêu đầy đủ nhất và là mục tiêu mà ta muốn đặt mặc định.

Để xác định điều này, ta sẽ đặt nó làm mục tiêu đầu tiên có sẵn. Điều này sẽ được sử dụng làm mặc định. Ta sẽ gọi nó là “tất cả” theo quy ước:

<pre>
JPEG = $ (ký tự đại diện * .jpg * .jpeg)
JPG = $ (JPEG: .jpeg = .jpg)
PNG = $ (JPG: .jpg = .png)
.SUFFIXES: .jpg .jpeg .png

tất cả: tải lên sạch sẽ

tải lên: webify
scp $ (PNG) root @ ip_address: / path / to / static / images

webify: chuyển đổi thay đổi kích thước

chuyển đổi: $ (PNG)

thay đổi kích thước: $ (PNG)
@echo đang đổi kích thước file …
@mogrify -resize 648> $ (PNG)
@echo thay đổi kích thước đã hoàn tất!

dọn dẹp:
rm * .png

.jpeg.png .jpg.png:
@echo đang chuyển đổi $ <thành $ @ bằng ImageMagick…
@convert $ <$ @
Chuyển đổi @echo thành $ @ thành công!
</pre>

Với những lần chạm cuối cùng này, nếu bạn nhập folder có file Makefile và .jpg hoặc .jpeg, bạn có thể gọi make mà không cần bất kỳ đối số nào để xử lý file của bạn, gửi chúng đến server của bạn, sau đó xóa file .png bạn đã tải lên.

make 

Như bạn thấy , thật dễ dàng để xâu chuỗi các nhiệm vụ lại với nhau và cũng có thể chọn một quá trình cho đến một điểm nhất định. Ví dụ: nếu bạn chỉ muốn chuyển đổi file của bạn và cần lưu trữ chúng trên một server khác, bạn chỉ có thể sử dụng mục tiêu webify.

Kết luận


Đến đây, bạn nên có một ý tưởng tốt về cách sử dụng Makefiles nói chung. Cụ thể hơn, bạn nên biết cách sử dụng make như một công cụ để tự động hóa hầu hết các loại thủ tục.

Mặc dù trong một số trường hợp, việc viết một script đơn giản có thể dễ dàng hơn, nhưng Makefiles là một cách đơn giản để cài đặt mối quan hệ có cấu trúc, phân cấp giữa các quy trình. Học cách tận dụng công cụ này có thể giúp đơn giản hóa các công việc lặp đi lặp lại.

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan

Cách thiết lập CouchDB với ElasticSearch trên VPS Ubuntu 13.10
2013-12-30
Cách sử dụng Celery với RabbitMQ để xếp hàng các tác vụ trên Ubuntu VPS
2013-12-19
Cách thiết lập một Honeypot Pháo binh trên VPS Ubuntu
2013-12-04
Cách triển khai Bộ sao chép trong MongoDB trên VPS Ubuntu
2013-12-03
Cách tạo một cụm Sharded trong MongoDB bằng VPS Ubuntu 12.04
2013-12-02
Cách sử dụng ApacheBench để thực hiện kiểm tra tải trên VPS Ubuntu 13.10
2013-11-25
Cách cài đặt control panel Ajenti trên Ubuntu 13.04
2013-11-12
Cách thiết lập và cài đặt Django CMS trên VPS Debian 7 hoặc Ubuntu 13
2013-11-12
Cách cài đặt Dropplets trên Ubuntu 13.04 NGINX VPS
2013-10-25
Cách sử dụng HAProxy để thiết lập cân bằng tải HTTP trên VPS Ubuntu
2013-09-26