2012-10-06 43 views
6

Xin chào Tôi đã quyết định thử và tìm hiểu cách xây dựng chương trình qua dòng lệnh và makefiles thay vì dựa vào Visual Studio để làm điều đó cho tôi. Sau khi tự làm quen với quá trình biên dịch thành các tệp .obj và liên kết, tôi chuyển sang NMake. Tôi đã viết một makefile cơ bản để thử và biên dịch các tệp nguồn nằm trong nhiều thư mục thành tệp .obj, liên kết từng thư mục của tệp .obj thành các tệp .lib và sau đó liên kết các tệp .lib vào tệp .exe.Quy tắc mẫu NMake

CC=cl /c /EHsc /Fo 
LIB=lib /OUT: 
LINKER=link /OUT: 
EXEC_NAME=Test.exe 
DEL=del 
MAKE=nmake 
OUT=.\out 

all: $(OUT)\*.lib 
    $(LINKER)$(EXEC_NAME) *.lib 

clean: 
    $(DEL) $(OUT) 

rebuild: 
    $(MAKE) clean 
    $(MAKE) all 

$(OUT)%.lib: $(OUT)\%\*.obj 
    $(LIB)%.lib $(OUT)%\*.obj 

%(OUT)\%\: 
    $(CC)$(OUT)\%\ .\%\*.cpp 

Khi tôi cố gắng chạy nó với nmake all nó nói với tôi: NMAKE : fatal error U1073: don't know how to make '.\out\*.lib'

Cảm ơn trước.

Trả lời

4

Câu hỏi này dễ bị bỏ qua trong một năm rưỡi nhưng gần đây đã thu hút 4 phiếu bầu.

Không có câu hỏi nào được nêu ra nhưng câu hỏi ngụ ý là: Tại sao không thể nmake tuân theo các quy tắc% -pattern trong tệp makefile của tôi?

Câu trả lời cho điều đó là MS nmake không hỗ trợ các quy tắc% -pattern. The documentation of MS nmake và của nó inference rules là dễ dàng tìm thấy.

GNU make và một số công cụ hỗ trợ khác hỗ trợ %-pattern rules. Các makefile ở đây cũng sẽ thất bại trong GNU make do những sai lầm rõ ràng.