Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cach su dung Ubuntu

1,474 views

Published on

Ubuntu

Published in: Engineering
  • Be the first to comment

Cach su dung Ubuntu

  1. 1. Trường Đại Học Bách Khoa Hà Nội Viện Điện Tử Viễn Thông ======o0o====== BÁO CÁO TUẦN 1 SỬ DỤNG UBUNTU VÀ MAKEFILE Sinh viên: NGÔ TRUNG KIÊN 20111719 ĐTTT10-K56 Hà Nội, 7/2014
  2. 2. MỤC LỤC MỤC LỤC.................................................................................................................................. 1 1. Học cách sử dụng ubuntu......................................................................................................2 1.1 Ubuntu là gì?................................................................................................................2 1.2 Tập lệnh cơ bản........................................................................................................... 2 1.2.1 Lệnh liên quan đến hệ thống...........................................................................2 1.2.2 Lệnh thao tác tập tin........................................................................................ 2 1.2.3 Lệnh làm việc trên terminal............................................................................ 3 1.2.4 Lệnh quản lý hệ thống.....................................................................................3 2. Make file.................................................................................................................................4 2.1 Định nghĩa....................................................................................................................4 2.2 Quy tắc chung..............................................................................................................4 2.3 Tổng quan về make..................................................................................................... 4 2.3.1 Gọi make trên terminal....................................................................................4 2.3.2 Ví dụ cơ bản..................................................................................................... 5 2.3.3 Sử dụng biến môi trường.................................................................................6 2.3.4 Bài toán make những file ở ngoài thư mục root............................................6 2.4 Những quy luật cụ thể trong makefiile......................................................................8 2.4.1 Explicit rules:................................................................................................... 8 2.4.2Wildcards - những kí tự đại diện.................................................................... 8 2.4.3 Phony targets( đích đến giả)............................................................................9 2.4.4 Empty targets( đích đến trống)....................................................................... 9 2.4.5 Variables and Automatic Variables(Biến và các biến tự động).................... 9 2.4.6 VPATH và vpath............................................................................................ 10 2.4.7 Quản lý thư viện.............................................................................................11 2.5 Hàm............................................................................................................................ 11 2.5.1 Cú pháp của hàm........................................................................................... 12 2.5.2 Những hàm thực hiện thao tác trên văn bản................................................12 2.5.3. Những hàm thao tác với tên file.................................................................. 13 2.5.4. Những hàm có điều kiện.............................................................................. 14 2.5.5. Hàm foreach..................................................................................................14 2.5.6. Hàm file.........................................................................................................15 2.5.7. Hàm Call....................................................................................................... 15 2.5.8. Hàm Value.....................................................................................................15 2.5.9. Hàm Origin....................................................................................................15 2.5.10. Hàm flavor.................................................................................................. 15
  3. 3. 1. Học cách sử dụng ubuntu 1.1 Ubuntu là gì? - Ubuntu (phát âm IPAuːˈbuːntuː) là một hệ điều hành máy tính dựa trên Debian GNU/Linux, một bản phân phối Linux thông dụng. Tên của nó bắt nguồn từ "ubuntu" trong tiếng Zulu, có nghĩa là "tình người", mô tả triết lí ubuntu: "Tôi được là chính mình nhờ có những người xung quanh," một khía cạnh tích cực của cộng đồng. Mục đính của Ubuntu bao gồm việc cung cấp một hệ điều hành ổn định, cập nhật cho người dùng bình thường, và tập trung vào sự tiện dụng và dễ dàng cài đặt. Ubuntu đã được đánh xếp hạng là bản phân phối Linux thông dụng nhất cho máy tính để bàn, chiếm khoảng 30% số bản Linux được cài đặt trên máy tính để bàn năm 2007. - Ubuntu là phần mềm mã nguồn mở tự do, có nghĩa là người dùng được tự do chạy, sao chép, phân phối, nghiên cứu, thay đổi và cải tiến phần mềm theo điều khoản của giấy phép GNU GPL. Ubuntu được tài trợ bởi Canonical Ltd (chủ sở hữu là một người Nam Phi Mark Shuttleworth). Thay vì bán Ubuntu, Canonical tạo ra doanh thu bằng cách bán hỗ trợ kĩ thuật. Bằng vệc để cho Ubuntu tự do và mở mã nguồn, Canonical có thể tận dụng tài năng của những nhà phát triển ở bên ngoài trong các thành phần cấu tạo của Ubuntu mà không cần phải tự mình phát triển. - Canonical ủng hộ và cung cấp hỗ trợ cho bốn bản phân phối dựa trên Ubuntu khác: Kubuntu và Xubuntu, vốn sử dụng KDE và Xfce như là môi trường desktop thay cho hệ thống GNOME mặc định được sử dụng bởi Ubuntu; Edubuntu, một dự án con và là phần bổ sung cho Ubuntu, được thiết kế cho môi trường học tập và sử dụng ở nhà; and Ubuntu JeOS (pronounced "Juice"), một phiên bản khác của Ubuntu, thiết kế cho các máy ảo. 1.2 Tập lệnh cơ bản 1.2.1 Lệnh liên quan đến hệ thống.  exit: thoát khỏi cửa sổ dòng lệnh.  logout: tương tự exit.  reboot: khởi động lại hệ thống.  halt: tắt máy.  startx: khởi động chế độ xwindows từ cửa sổ terminal.  mount: gắn hệ thống tập tin từ một thiết bị lưu trữ vào cây thư mục chính.  unmount: ngược với lệnh mount. 1.2.2 Lệnh thao tác tập tin  ls: lấy danh sách tất cả các file và thư mục trong thư mục hiện hành.  pwd: xuất đường dẫn của thư mục làm việc.
  4. 4.  cd: thay đổi thư mục làm việc đến một thư mục mới.  mkdir: tạo thư mục mới.  rmdir: xoá thư mục rỗng.  cp: copy một hay nhiều tập tin đến thư mục mới.  mv: đổi tên hay di chuyển tập tin, thư mục.  rm: xóa tập tin.  wc: đếm số dòng, số kí tự... trong tập tin.  touch: tạo một tập tin.  cat: xem nội dung tập tin.  vi: khởi động trình soạn thảo văn bản vi.  df: kiểm tra dung lượng đĩa.  du: xem dung lượng đĩa đã dùng cho một số tập tin nhất định 1.2.3 Lệnh làm việc trên terminal  clear: xoá trắng cửa sổ dòng lệnh.  date: xem ngày, giờ hệ thống.  cal: xem lịch hệ thống. 1.2.4 Lệnh quản lý hệ thống  rpm: kiểm tra gói đã cài đặt hay chưa, hoặc cài đặt một gói, hoặc sử dụng để gỡ bỏ một gói.  ps: kiểm tra hệ thống tiến trình đang chạy.  kill: dừng tiến trình khi tiến trình bị treo. Chỉ có người dùng super-user mới có thể dừng tất cả các tiến trình còn người dùng bình thường chỉ có thể dừng tiến trình mà mình tạo ra.  top: hiển thị sự hoạt động của các tiến trình, đặc biệt là thông tin về tài nguyên hệ thống và việc sử dụng các tài nguyên đó của từng tiến trình.  pstree: hiển thị tất cả các tiến trình dưới dạng cây.  sleep: cho hệ thống ngừng hoạt động trong một khoảng thời gian.  useradd: tạo một người dùng mới.  groupadd: tạo một nhóm người dùng mới.  passwd: thay đổi password cho người dùng.  userdel: xoá người dùng đã tạo.  groupdel: xoá nhóm người dùng đã tạo.  gpasswd: thay đổi password của một nhóm người dùng.  su: cho phép đăng nhập với tư cách người dùng khác.  groups: hiển thị nhóm của user hiện tại.
  5. 5.  who: cho biết ai đang đăng nhập hệ thống.  w: tương tự như lệnh who.  man: xem hướng dẫn về dòng lệnh như cú pháp, các tham số.. 2. Make file 2.1 Định nghĩa. - Makefile là 1 file đặc biệt dùng để quản lý các tập tin trong dự án, hiểu đơn giản makefile là 1 kịch bản build tức là khi Linux đọc file đó nó biết nó sẽ phải làm những nhiệm vụ gì, làm như thế nào và tài nguyên nó cần là gì nằm ở đâu. - Một ví dụ về quá trình biên dịch make file 2.2 Quy tắc chung. - Make có quy tắc và cú pháp như sau: <target> ... : <prerequisites>... “TAB”<command>... target: thường là tên của file được tạo ra bởi chương trình, hoặc cũng có thể là các chỉ định để thực thi một hoặc một loạt tác vụ nào đó, ví dụ `clean' thường để xoá các file nhị phân được tạo ra trong quá trình biên dịch. Các target không được bắt đầu bằng dấu '.'. prerequisites: là file hoặc các file đầu vào hoặc phụ thuộc để tạo ra target. target thường phụ thuộc vào các file này, khi các file này thay đổi (do chỉnh sửa mã nguồn->thời gian lưu cửa file bị thay đổi) thì target sẽ được biên dịch lại. command: là lệnh hoặc tập lệnh mà trình make sẽ thực thi. Một rule (quy tắc) có thể có nhiều lệnh (command), mỗi lệnh thường được viết trên một dòng. Chú ý: trước mỗi dòng lệnh bạn cần phải có dấu tab. 2.3 Tổng quan về make. 2.3.1 Gọi make trên terminal make Chương trình sẽ tự động thực hiện make với file tên là makefile hay Makefile trong thư mục, còn nếu muốn chạy 1file make với tên gọi khác ví dụ make_kien thì
  6. 6. ta gõ make -f make_kien 2.3.2 Ví dụ cơ bản Ta xét 1 chương trình: main.cpp,hello.cpp,factorial.cpp,functions.h //functions.h void print_hello(); int factorial(int n); //hello.cpp void print_hello()[ cout<<"Hello world!"; } //factorial.cpp int factorial(int n){ if(n!=1) return (n*factorial(n-1)); else return 1; } //main.cpp #include<iostream> #include"functions.h" int main(){ print_hello(); cout<<"n5!= "<<factorial(5)<<endl; return 0; } Bình thương khi compile, trên terminal ta phải gõ : g++ -o main main.cpp hello.cpp factorial.cpp Còn với make, lệnh sẽ đơn giản hơn, ta tạo file makefile với nội dung + Makefile đơn giản: //makefile all: g++ -o main main.cpp hello.cpp factorial.cpp + Makefile sử dụng các thành phần phụ thuộc //makefile using dependencies all: hello hello: main.o factorial.o hello.o g++ main.o factorial.o hello.o -o hello main.o: main.cpp g++ -c main.cpp
  7. 7. factorial.o: factorial.cpp g++ -c factorial.cpp hello.o: hello.cpp g++ -c hello.cpp #xoa di cac file rac .o trong qua trinh compiler clean: rm -rf *o hello 2.3.3 Sử dụng biến môi trường Ví dụ với bài trên Khi dặt biến: ví dụ CC=g++, thì cứ chỗ nào g++ ta thay bằng $(CC) CC=g++ CFLAGS=-c -Wall all: hello hello: main.o factorial.o hello.o $(CC) main.o factorial.o hello.o -o hello main.o: main.cpp $(CC) $(CFLAGS) main.cpp factorial.o: factorial.cpp $(CC) $(CFLAGS) factorial.cpp hello.o: hello.cpp $(CC) $(CFLAGS) hello.cpp clean: rm -rf *o hello Bên tạo biến môi trường, khi mà phát triển chương trình lớn cỡ hàng nghìn dòng dổ lên mà muốn thay đổi 1 số thành phần, target ta chỉ cần thay đổi ở khai báo, đơn giản về dễ sửa đổi hơn rất nhiều. 2.3.4 Bài toán make những file ở ngoài thư mục root Phân tích ví dụ make cơ bản USER_DIR = .. #biến USER_DIR với nội dung là “..” dùng để chỉ tên user LIB_DIR= $(USER_DIR)/libraries
  8. 8. #đường dẫn đến thư viện cần sử dụng MAIN_FILE_DIR=$(USER_DIR)/mainFile #địa chỉ chương trình main #name of main file MAIN_FILE_NAME= ngokien #tên chương trình main INC = -I$(LIB_DIR) #Sử dụng tùy chọn -I để báo với gcc biết cần tìm trong đường dẫn LIB_DIR những file .h include vào. #compiler GXX = g++ #biến đại diện cho công cụ compiler g++ FLAG = -Wall -g -W #Đây là những tùy chọn về tối ưu trong g++. Bật những cờ này lên sẽ giúp đưa ra những cảnh báo về code chương trình giúp viết code tốt hơn. #source STUB = $(LIB_DIR)/ipc.cpp $(LIB_DIR)/person.cpp #chứa tên các file thành viên( phụ thuộc) #object OBJECT = ipc.o person.o #chứa tên các file object thành viên #The Target #lệnh run: ready code //tác vụ này gồm 2 công việc, ready và code, thực hiện lần lượt ở dưới $(GXX) $(INC) $(FLAG) $(MAIN_FILE_NAME).o $(OBJECT) -o run ready: $(GXX) $(INC) $(FLAG) -c $(STUB) code: $(GXX) $(INC) $(FLAG) -c $(MAIN_FILE_DIR)/$(MAIN_FILE_NAME).cpp clean: rm -rf *.o run #xóa file rác .o khi bạn làm việc với project lớn thì việc tạo clean khá quan trọng vì khi gọi nó sẽ xóa đi những gì được gọi là rác trong quá trình build như là những file object hoặc file executable cũ chẳng hạn
  9. 9. Một số lệnh với make: make gọi target đầu tiên make <tên target> gọi target có tên được ghi ra make <tên target> -n show toàn bộ kịch bản build của target được gọi 2.4 Những quy luật cụ thể trong makefiile 2.4.1 Explicit rules: + Hầu hết những quy tắc mà ta sẽ viết đều phải qui định rõ ràng các thành phần: những cái đích đến (targets) và danh sách những thành phần phụ thuộc (prerequisites). + Một quy tắc có thể có nhiều hơn một đích đến, nghĩa là những đích đến đó đều có chung những thành phần phụ thuộc. + Nếu như những đích đến đó mà chưa được cập nhật thì sẽ có những lệnh giống nhau để cập nhật cho mỗi đích đến đó. + Ví dụ: target1.o target2.o: prerequisite1.h prerequisite2.h prerequisite3.cpp → tức là target1.o và target2.o đều phụ thuộc vào 3 tập tin là prerequisite1.h prerequisite2.h và prerequisite3.cpp → ta có thể viết lại là: target1.o : prerequisite1.h prerequisite2.h prerequisite3.cpp target2.o : prerequisite1.h prerequisite2.h prerequisite3.cpp + Mỗi 1 đích đến được quản lý một cách độc lập. Mỗi lần thấy một đích đến, make sẽ thêm đích đến đó và danh sách thành phần phụ thuộc vào đồ thị phụ thuộc của make. + Tuy nhiên, chỉ có một bộ danh sách các lệnh được liên kết với bất kỳ đích đến nào.Nếu chúng ta tạo ra 2 bộ danh sách lệnh cho cùng một thời điểm thì make sẽ cảnh báo và kết quả có được có thể sẽ sai so với những gì ta mong muốn. * Chú ý: make hỗ trợ cách viết một quy tắc theo kiểu: target : prerequisites ; command 2.4.2 Wildcards - những kí tự đại diện. + Trong makefile luôn tồn tại một danh sách rất dài các file. Vì vậy, để giúp cho make file đơn giản hơn thì make hỗ trợ việc sử dụng các ký tự đại diện. + Các ký tự đại diện như: ~, *, ?, [...], and [^...] → ~: diễn tả đường dẫn của thư mục home → * : ví dụ: → *.* chỉ tất cả những file chứa dấu “.” → *.cpp chỉ tất cả những file có phần đuôi là “.cpp” như: node.cpp , graph.cpp , egde.cpp … → [...] : diễn tả một lớp đối tượng nào đó → [^...]: diễn tả phủ định của lớp đối tượng trên. + Cần cẩn thận khi sử dụng các ký tự đại diện vì ta có thể hiểu sai ý nghĩa của chúng.
  10. 10. 2.4.3 Phony targets( đích đến giả) + Đa số các trường hợp thì đích đến (target) trong makefile là tên một tệp tồn tại thực tế. Tuy nhiên, đích đến ở đây có thể chỉ đơn giản là một nhãn dùng để đại diện cho một tập lệnh. + Ví dụ: đích đến giả clean: clean: rm -rf *.o + Để thực hiện lệnh trên, chỉ cần gõ make clean. + Tuy nhiên,nếu chỉ viết như vậy ta sẽ không thể phân biệt được đây là đích đến giả hay là tên một tập tin. + Đích đến giả luôn luôn không có danh sách thành phần tệp phụ thuộc, vì vậy nó luôn luôn bị xác định là chưa được thực thi. Để tránh hiện tượng này, tiện ích make cung cấp một đích đến đặc biệt là .PHONYđể thông báo với make rằng đích đến ở đây không phải là một file thực sự. + Ví dụ: .PHONY: clean clean: rm -rf *.o + Dưới đây là danh sách những đích đến giả tiêu chuẩn, hay được sử dụng trong makefile là:→ all: thực hiện tất cả các nhiệm vụ để xây dựng ứng dụng. → install: cài đặt ứng dụng từ cây nguồn đã được biên dịch → clean: xoá các tập tin được tạo ra từ các nguồn. → distclean: xoá tất cả các file mà nó không được tạo ra từ cây nguồn. → TAGS: tạo ra các bảng thẻ để sử dụng cho các biên tập viên. → info: tạo ra các tệp tin info GNU từ các nguồn Texinfo → check: chạy bất kỳ một bài kiểm tra nào liên quan tới ứng dụng. 2.4.4 Empty targets( đích đến trống) + Đích đến trống gần giống với đích đến giả + Tuy nhiên, đích đến giả không có danh sách tập tin phụ thuộc. Còn đích đến trống thì có tồn tại danh sách tập tin phụ thuộc. + Đích đến trống nhằm thực hiện một số lệnh nhưng không muốn tạo ra file đầu ra. 2.4.5 Variables and Automatic Variables(Biến và các biến tự động) + Như đã viết ở trên, ta có thể đặt tên biến rồi gọi biến như sau $(variable-name) + Các biến tự động được cài đặt bởi make sau 1 quy luật dùng để truy cập tới các đích đến và danh sách các tập tin phụ thuộc. + Việc sử dụng các biến tự động giúp cho makefile gọn hơn, tránh lặp code
  11. 11. + Một vài biến tự động là: → $@ : tên của đích đến hiện tại. → $% : → $< : tên của tệp tin phụ thuộc đầu tiên. → $? : tên của tất cả các tệp tin phụ thuộc mới hơn so với đích đến, được ngăn cách bởi dấu cách. → $^ : tên của tất cả các tệp tin phụ thuộc được ngăn cách nhau bởi dấu cách, và trong danh sách này các tên bị trùng lặp đã bị loại bỏ. → $+ : giống $^ ở chỗ đây cũng là tên của tất cả các tệp tin phụ thuộc được ngăn cách nhau bởi dấu cách, nhưng khác ở chỗ là trong danh sách này chấp nhận việc trùng lặp tên. Biến này được dùng trong các trường hợp cụ thể nơi mà các bản sao là có nghĩa. 2.4.6 VPATH và vpath + Ở đây sẽ đề cập đến việc giải quyết bài toán biên dịch file ở những thư mục khác nhau + Ví du: ta có 1 project: ~/src/MyProject ----> Makefile ----> include ----> counter.h ----> lexer.h ---- src ----> count_words.c ----> counter.c ----> lexer.l + Nội dung của makefile là: count_words: count_words.o counter.o lexer.o -lfl gcc $^ -o $@ count_words.o: count_words.c include/counter.h gcc -c $< counter.o: counter.c include/counter.h include/lexer.h gcc -c $< lexer.o: lexer.c include/lexer.h gcc -c $< lexer.c: lexer.l flex -t $< > $@ + Khi chạy make: thì sẽ thông báo lỗi vì make không thể tìm thấy vị trí của file count_words.c vì file này không trong cùng một thư mục với Makefile. + Ta sửa như sau: VPATH = src + Makefile thành: count_words: count_words.o counter.o lexer.o -lfl gcc $^ -o $@ count_words.o: count_words.c include/counter.h
  12. 12. gcc -c $(VPATH)/$< counter.o: counter.c include/counter.h include/lexer.h gcc -c $(VPATH)/$< lexer.o: lexer.c include/lexer.h gcc -c $< lexer.c: lexer.l flex -t $(VPATH)/$< > $@ + Bây giờ, chạy make , ta vẫn bị thông báo lỗi, vì make không thể tìm được file thư viện. Ta sửa bằng cách sau: CPPFLAGS = -I include // ta đặc tả tên thư viện để make biết. + Makefile bây giờ thành : count_words: count_words.o counter.o lexer.o -lfl gcc $^ -o $@ count_words.o: count_words.c include/counter.h gcc $(CPPFLAGS) -c $(VPATH)/$< counter.o: counter.c include/counter.h include/lexer.h gcc $(CPPFLAGS) -c $(VPATH)/$< lexer.o: lexer.c include/lexer.h gcc $(CPPFLAGS) -c $< lexer.c: lexer.l flex -t $(VPATH)/$< > $@ 2.4.7 Quản lý thư viện - Mặc định gcc, g++ có thể liên kết với các file đối tượng. - Gõ: gcc –o main main.c func.o. - Tĩnh: chứa các file đối tượng .o được tạo bởi công cụ ar + Gõ: ar rcs libfunc.a func.o (tạo ra thư viện libfunc.a) + Dịch main với: gcc -o main main.c libfunc.a - Động: được load khi chương trình chạy, dược tạo bởi gcc g++ + Gõ: gcc –c –fPIC func.c (tạo ra func.o) + Gõ: gcc –shared –W1,soname,libfunc.so.1 –o libfunc.so.1.0 func.o + Tạo ra libfunc.so.1.0 (libfunc.dll) + Dịch main với: gcc –o main main.c libfunc.so.1.0 - Trường hợp chạy main lỗi không tìm thấy thư viện liên kết động --> chỉ lại đường dẫn thư viện: export LD_LIBRARY_PATH=$(pwd) --> sao chép libfunc.so.1.0 đến /usr/lib rồi chạy ldconfig để cập nhật thư viện 2.5 Hàm + GNU make hỗ trợ việc xây dựng hàm + Hàm trong make gần giống với việc định nghĩa biến, nhưng trong hàm luôn bao gồm 1 hay nhiều tham số được ngăn cách bởi “,”
  13. 13. 2.5.1 Cú pháp của hàm + $(function arguments)hay ${function arguments} + Ở đây: - function ở đây là tên của hàm - arguments là danh sách tên biến, biến ngăn cách với function bởi một hay nhiều dấu cách, hoặc dấu tab. Và nếu có nhiều biến thì chúng sẽ ngăn cách nhau bởi dấu phẩy + Trong danh sách arguments có thể có chứa một hàm khác 2.5.2 Những hàm thực hiện thao tác trên văn bản. 2.5.2.1 Hàm $(subst from,to,text) + Chức năng là thay thế from thành to trong text + ví dụ: $(subst ee,EE,feet on the street) → kết quả sẽ là: “fEEt on the strEEt” 2.5.2.2 Hàm $(patsubst pattern,replacement,text) + Chức năng: thay thế trong text thành phần có dạng mẫu patternthành replacement + Ví dụ: $(patsubst %.c,%.o,x.c.c bar.c) + Kết quả là : “x.c.o bar.o” 2.5.2.3 Hàm $(strip string) + Chức năng: loại bỏ khoảng trắng ở đầu và cuối đoạn text và nhiều khoảng trắng giữa các ký tự bằng một khoảng trắng duy nhất + Ví dụ: $(strip a b c ) + Kết quả là : “a b c” 2.5.2.4. Hàm $(findstring find,in) + Chức năng là: tìm thành phần findtrong in + Ví dụ:$(findstring a,a b c) + Kết quả: trả về là a + Còn nếu là $(findstring a,b c)thì kết quả là khoảng trắng 2.5.2.5. Hàm $(filter pattern...,text) + Chức năng: lọc lấy trong texttất cả những thành phần có mẫu parttern + Ví dụ: sources := foo.c bar.c baz.s ugh.h foo: $(sources) cc $(filter %.c %.s,$(sources)) -o foo + Kết quả: cc chỉ biên dịch những file có dạng .c và .s trong soucre, nghĩa là chỉ biên dịch file foo.c bar.c và baz.s 2.5.2.6. Hàm $(filter-out pattern...,text) + Chức năng: loại bỏ tất cả trong textnhững file dạng pattern + Ví dụ: objects=main1.o foo.o main2.o bar.o
  14. 14. mains=main1.o main2.o $(filter-out $(mains),$(objects)) + Kết quả: còn lại những file mà khác những file trong mainđó là foo.ovà bar.o 2.5.2.7. Hàm $(sort list) + Chức năng: sắp xếp những từ trong danh sách theo thứ tự bảng chữ cái và bỏ đi từ trùng lặp + Ví dụ: $(sort foo bar lose bar) + Kết quả là: bar foo lose 2.5.2.8. Hàm $(word n,text) + Chức năng: trả về từ thứ n trong text + Ví dụ: $(word 2, foo bar baz) + Kết quả: trả về bar 2.5.2.9. Hàm $(wordlist s,e,text) + Chức năng: trả về danh sách những từ bắt đầu từ từ thứ s và kết thúc từ từ thứ 2. nếu e lớn hơn s thì kết quả trả về rỗng + Ví dụ: $(wordlist 2, 3, foo bar baz) + Kết quả: trả về bar baz 2.5.2.10. Hàm $(words text) + Chức năng: trả về số lượng từ trong text + Ví dụ: $(words foo bar) + Kết quả: trả về giá trị 2 2.5.2.11. Hàm $(firstword names...) + Chức năng: trả về từ đầu tiên trong danh sách names. + Ví dụ: $(firstword foo bar) + Kết quả: trả về foo 2.5.2.12. Hàm $(lastword names...) + Chức năng: trả về từ cuối cùng trong danh sách names. + Ví dụ: $(firstword foo bar) + Kết quả: trả về bar 2.5.3. Những hàm thao tác với tên file 2.5.3.1. $(dir names...) + Chức năng: lấy ra một phần đường dẫn của mỗi tên tệp trong names, nếu tên tệp không có đường dẫn thì kết quả là “./” + Ví dụ: $(dir src/foo.c hacks) + Kết quả: trả về src/ ./ 2.5.3.2.$(notdir names...) + Chức năng: Lấy ra tất cả những thành phần đằng sau dấu gạch chéo, nếu sau dấu
  15. 15. gạch chéo không có ký tự nào thì kết qủa trả về rỗng, nếu tên không có dấu gạch chéo thì nó được giữ nguyên. + Ví dụ: $(notdir src/foo.c hacks) +Kết quả trả về: foo.c hacks 2.5.3.3.$(suffix names...) + Chức năng: kết quả trả về tất cả hậu tố của tên trong names + Ví dụ: $(suffix src/foo.c src-1.0/bar.c hacks) + Kết quả : .c .c 2.5.3.4. $(basename names...) + Chức năng: kết quả trả về thành phần của tên bỏ đi hậu tố + Ví dụ: $(suffix src/foo.c src-1.0/bar.c hacks) + Kết quả là: src/foo src-1.0/bar hacks 2.5.3.5. $(addsuffix suffix,names...) + Chức năng: thêm hậu tố vào tên trong names + Ví dụ:$(addsuffix .c,foo bar) + Kết quả là: foo.c bar.c 2.5.3.6.$(addprefix prefix,names...) + Chức năng: thêm tiền tố cho tên + Ví dụ: $(addprefix src/,foo bar) + Kết quả là src/foo src/bar 2.5.3.7.$(join list1,list2) + Chức năng: nối những từ trong list1với những từ tronglist2theo kiểu word by word + Ví dụ:$(join a b,.c .o) + Kết quả là: a.c b.o 2.5.3.8. $(wildcard pattern) + Chức năng: trả về danh sách những tên file có dạng giống mô hình pattern 2.5.3.9. $(realpath names...) + Chức năng: với mỗi tên trong namessẽ trả về một tên tuyệt đối, tức không chưa bất kỳ dấu “.” hay ..hay dấu / hoặc bất kỳ liên kết nàoiện 2.5.4. Những hàm có điều kiện 2.5.4.1. $(if condition,then-part[,else-part]) 2.5.4.2. $(or condition1[,condition2[,condition3...]]) 2.5.4.3. $(and condition1[,condition2[,condition3...]]) 2.5.5. Hàm foreach + Chức năng là lặp lại một vài đoạn text với những biến thể được kiểm soát.
  16. 16. + Cú pháp của hàm là: $(foreach var,list,text) 2.5.6. Hàm file + Chức năng là cho phép makefile viết text lên file + Cú pháp: $(file op filename,text) + Toán tử opcó thể thay thế bằng >hay >> + text là nội dung và sẽ ghi lên file có tên filename 2.5.7. Hàm Call + Chức năng là tạo ra các hàm với những tham số mới + Cú pháp: $(call variable,param,param,...) + Tức ta có thể viết một biểu thức phức tạp biểu diễn giá trị của một biến, sau đó mở rộng ra với các giá trị biến khác nhau. + Ví dụ: reverse = $(2) $(1) foo = $(call reverse,a,b) + Khí đó : foo = b a 2.5.8. Hàm Value + Đây là cách khác để sử dụng giá trị của một biến + Cú pháp: $(value variable) 2.5.9. Hàm Origin + Chức năng dùng để tìm vị trí nơi mà biến được tạo giá trị + Cú pháp: $(origin variable) + Các giá trị trả về là: → ‘undefined’ : nếu biến chưa được định nghĩa → ‘default’: nếu biến có giá trị mặc định → ‘environment’: nếu như biến được thừa hưởng từ môi trường cung cấp để thực hiện. → ‘environment override’: nếu biến được thừa hưởng từ môi trường cung cấp để thực hiện và như là kết quả của tuỳ chọn -e → ‘file’: nếu như biến được định nghĩa trong makefile → ‘command line’ : nếu như biến được định nghĩa trong command line → ‘override’: nếu như biến được định nghĩa với một chỉ thị được thiết lập trong makefile → ‘automatic’: nếu biến là biến tự động được định nghĩa để thực hiện các công thức của mỗi quy tắc. 2.5.10. Hàm flavor + Dùng để chỉ ra một số thông tin của biến, gần giống với hàm origin + Cú pháp: $(flavor variable)
  17. 17. + Các kết quả trả về: → undefined: nếu biến chưa được định nghĩa → recursive : nếu biến được mở rộng một cách đệ quy → simple : nếu là biến đơn giản.

×