2012-04-16 28 views
7

Tôi cần một vài liên kết tượng trưng trong dự án của mình.Có phải phụ thuộc vào một liên kết có thể có trong Makefile không?

Từ src/openlayers, thư mục imgtheme phải được symlinked trong contrib/openlayers. Thư mục contrib/openlayers cũng sẽ được tạo tự động.

.PHONY: run 
run: contrib/openlayers/theme contrib/openlayers/img 
    ../bin/pserve development.ini --reload 

contrib/openlayers/theme: 
    ln -s src/openlayers/theme [email protected] 

contrib/openlayers/img: 
    ln -s src/openlayers/img [email protected] 

Nhưng quy tắc này cố gắng tạo liên kết tượng trưng mỗi lần. (Tôi đặt -f cờ cho ln, do đó, nó tạo lại các liên kết tượng trưng mỗi lần.)

Trả lời

3

Chắc chắn, điều này có thể hoạt động. Xử lý tất cả mọi thứ như một tập tin, bao gồm cả một liên kết tượng trưng. Nó sẽ kiểm tra xem tệp có tồn tại hay không (vì bạn không liệt kê bất kỳ điều kiện tiên quyết nào, không có so sánh dấu thời gian). Trong trường hợp của một symlink nó thực sự kiểm tra bất cứ điều gì liên kết trỏ đến, tất nhiên, không phải là liên kết chính nó.

Bạn không thể hiện điều gì xảy ra khi bạn làm điều này nhưng dựa trên mô tả của bạn, một trong hai điều đang xảy ra: (a) thư mục contrib/openlayers không tồn tại để lệnh ln tạo ra lỗi và không tạo liên kết tượng trưng, ​​do đó, hãy cố gắng tạo lại nó trong lần chạy tiếp theo, hoặc (b) liên kết tượng trưng của bạn đang được tạo không chính xác và chỉ vào không có gì, có nghĩa là khi cố gắng xem nó có tồn tại không và thực hiện sẽ cố gắng tạo lại nó.

Nếu, ví dụ: thư mục src của bạn là anh chị em trong thư mục contrib, thì các liên kết tượng trưng của bạn là sai; bạn sẽ nhận được:

contrib/openlayers/theme -> src/openlayers/theme 

Hoặc, khi hạt nhân cố gắng giải quyết nó:

contrib/openlayers/src/openlayers/theme 

Có nhiều khả năng đó là những gì bạn muốn. Tôi khuyên bạn nên sử dụng một cái gì đó như thế này:

contrib/openlayers/theme: 
     mkdir -p contrib/openlayers 
     ln -s ../../src/openlayers/theme contrib/openlayers/theme 

Sau đó, xác minh rằng liên kết tượng trưng, ​​khi đã tạo, thực sự trỏ đến nơi bạn muốn.

+0

Bạn nói đúng, các liên kết tượng trưng đã bị hỏng. –

12

Trong trường hợp bạn gặp sự cố này mặc dù liên kết tượng trưng của bạn trỏ chính xác đến tệp hiện có: hãy ghi nhớ rằng "make" xem mtime của tệp đích của liên kết tượng trưng và không tại mtime của liên kết tượng trưng. Do đó, nếu quy tắc gọi là "ln -s" có bất kỳ phụ thuộc nào là mới hơn so với tệp mà các liên kết tượng trưng trỏ vào, thì "make" phải chạy lại các lệnh trong quy tắc đó mỗi lần. Nó sẽ làm như vậy một lần nữa và một lần nữa bởi vì việc tạo ra một liên kết tượng trưng trỏ đến một tập tin không cập nhật mtime của tập tin đó.

Bạn có thể sử dụng lệnh "chạm" để đảm bảo rằng đích đến của liên kết của bạn có thời gian gần đây hơn thời gian phụ thuộc của bạn.

+1

Điểm tốt! Giúp tôi tìm ra lý do quy tắc của tôi liên tục muốn tạo liên kết (http://stackoverflow.com/a/19213369/1510289) –

Các vấn đề liên quan