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
.
Nguồn
2014-12-24 18:51:53
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. –