2011-02-03 6 views
5

Với make trên Linux, chúng ta có thể làm những việc như:làm thế nào để có được đầu ra của một lệnh khi sử dụng Microsoft nmake?

foo=$(shell /bin/bar) 

chạy lệnh bar và gán đầu ra để foo. Điều này sau này có thể được sử dụng trong makefile bằng cách tham chiếu $(foo).

Nhưng bây giờ tôi có một dự án Microsoft trên tay của tôi được biên dịch và liên kết với Microsoft nmake.exe. Có một điều tương đương cho nmake mà sẽ cho phép tôi chạy một lệnh và gán đầu ra cho một biến?

Trả lời

2

Tôi nghĩ câu trả lời là "không". Không có tương đương.

Tôi khuyên bạn nên chuyển đổi sang MSBuild nếu có thể.

+0

Tôi chưa bao giờ tìm cách để làm điều đó. Để công bằng, MSBuild cũng không giải quyết được vấn đề, mặc dù cuối cùng tôi đã chuyển đổi nó thành những lý do khác. Cuối cùng, để giải quyết vấn đề này, tôi đã phải viết kịch bản một chút của MS PowerShell để thực hiện các cuộc gọi cần thiết mà chúng tôi cần trước khi xây dựng dự án. –

2

Mặc dù đây là một câu hỏi cũ, có một phương pháp làm những gì được hỏi; của nó chỉ phức tạp, giống như tất cả mọi thứ trong tập tin thực thi!

Người ta phải sử dụng các cơ chế kết hợp của thực tế là tạo biến môi trường nhập khẩu và bộ tiền xử lý có thể gọi lệnh, và sau đó gọi hàm Makefile đệ quy. Giả sử Makefile được gọi là Makefile (không có phần mở rộng, là phần mở rộng mặc định).

!IFNDEF MAKE 
MAKE=NMAKE 
!ENDIF 
!IFNDEF SHELLVALUE 
! IF [echo off && FOR /F "usebackq" %i IN (`hostname`) DO SET SHELLVALUE=%i && $(MAKE) /$(MAKEFLAGS) /nologo /f $(MAKEDIR)\Makefile && exit /b ] == 0 
!  MESSAGE Make completed 
! ELSE 
!  ERROR Error in nmake 
! ENDIF 
!ELSE 
# $(SHELLVALUE) now contains the string returned from the command USERNAME 
!MESSAGE Shellvalue is $(SHELLVALUE) 
#  Put the parts of the makefile that depend on SHELLVALUE here 
!ENDIF 
# 
# To be a valid makefile it must have some rules to perform 
all: 
    @echo;$(SHELLVALUE) 

Vâng, tôi biết nó thật khủng khiếp, nhưng nó thể hiện cách thực hiện kỹ thuật, có thể thực hiện với bất kỳ lệnh trình bao nào và không chỉ hostname.