سؤال

وأنا محاولة لاقامة MAKEFILE NMAKE لتصدير الملفات نموذج بالحجم الطبيعي balsamiq جهدنا لبابوا نيو غينيا الملفات تلقائيا، ولكن أخشى أنني لا يمكن أن تجعل رؤساء ولا ذيول كيفية جعل قاعدة عامة للقيام بذلك، دون إدراج صراحة كافة الملفات I تريد تصديرها.

هذه الصفحة تفاصيل بناء الجملة سطر الأوامر لتصدير الملفات، و <ل أ href = "http://msdn.microsoft.com/en-us/library/ms925728.aspx" يختلط = "noreferrer"> هذه الصفحة يحتوي على سبيل المثال الذي يبدو أنه يحتوي على قاعدة عامة لملفات .OBJ لإكس الملفات.

وماكيفيلي لقد حاولت حتى الآن يبدو مثل هذا:

.bmml.png:
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $< $@

ولكن هذا لا يعمل.

إذا كنت ببساطة تشغيل NMAKE (مع بعض الملفات بابوا نيو غينيا قديمة)، NMAKE فقط تفعل ذلك:

[C:\Temp] :nmake

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


[C:\Temp] :

إذا أطلب لبناء ملف معين واحد، فإنه يفعل ذلك:

[C:\Temp] :nmake "TestFile.png"

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1073: don't know how to make '"TestFile.png"'
Stop.

[C:\Temp] :

وأي معلمو NMAKE الى ان هناك يمكن أن يحدد لي مباشرة؟

ومثال MAKEFILE مما يجعل مجرد دات الملفات من ملفات .txt عن طريق نسخها، لتجربة، يبدو مثل هذا:

.txt.dat:
    copy $< $@

وهذا لا يفعل شيئا كذلك، لذلك بشكل واضح انا لا فهم كيفية عمل هذه القواعد العامة. هل أنا بحاجة إلى تحديد هدف فوق تسرد بطريقة أو بأخرى الملفات أريد؟


تعديل : في استجابة للإجابة جديدة:

وهذا MAKEFILE:

{}.txt{}.dat:
    copy $** $@

ومع هذا الملف (TEST.DAT)

1
2
3

وهذا الأمر:

NMAKE test.txt

وتنتج رسالة الخطأ هذه:

[C:\] :nmake test.txt

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

NMAKE : fatal error U1073: don't know how to make 'test.txt'
Stop.
هل كانت مفيدة؟

المحلول

وقواعد نمط NMAKE هي الكثير مثل GNU جعل قواعد لاحقة من المدرسة القديمة. في حالتك، هل كان ذلك تقريبا الحق في بادئ ذي بدء، ولكن كنت في عداد المفقودين إعلان .SUFFIXES. على سبيل المثال:

.SUFFIXES: .bmml .png
.bmml.png:
    @echo Building $@ from $<

وأعتقد أن هذا هو الجزء الوحيد من الحل على الرغم من أنك أيضا المذكورة الرغبة في تجنب صراحة سرد كافة الملفات التي تريد تحويلها. للأسف، وأنا لا أعرف من وسيلة نظيفة جدا للقيام بذلك في NMAKE، لأنه يوسع فقط البدل في قوائم التبعية، وماذا تريد حقا في قائمة التبعية ليست قائمة الملفات الموجودة بالفعل (و* .bmml الملفات)، ولكن قائمة الملفات التي سيتم إنشاؤها من هذه الملفات (ملفات بابوا نيو غينيا *). ومع ذلك، أعتقد أنك يمكن أن تحقق هدفك مع الاحتجاج NMAKE العودية مثل هذا:

all: *.bmml
    $(MAKE) $(**:.bmml=.png)

وهنا، سوف NMAKE توسيع *.bmml في قائمة متطلب سابق لall إلى قائمة الملفات .bmml في الدليل، وبعد ذلك سوف تبدأ مثيل NMAKE الجديد، وتحديد الأهداف لبناء كما أن قائمة الملفات مع كافة مثيلات .bmml استبداله .png. لذلك، ووضع كل ذلك معا:

.SUFFIXES: .bmml .png
all: *.bmml
    @echo Converting $(**) to .png...
    @$(MAKE) $(**:.bmml=.png)

.bmml.png:
    @echo Building $@ from $<

إذا كنت إنشاء ملفات Test1.bmml وTest2.bmml ثم قم بتشغيل هذا MAKEFILE، وأحصل على الإخراج التالية:

Converting Test1.bmml Test2.bmml to .png...
Building Test1.png from Test1.bmml
Building Test2.png from Test2.bmml

وبطبيعة الحال، إذا كان لديك الكثير جدا من هذه الملفات .bmml، قد فواجه من القيود طول سطر الأوامر، لذلك انتبه لذلك. في هذه الحالة، أوصي إما إدراج صراحة الملفات المصدر، أو باستخدام أداة جعل أكثر قدرة، مثل GNU جعل (والذي يتوفر ل Windows في مجموعة متنوعة من الأشكال).

نصائح أخرى

وسيكون هذا العمل بالنسبة لك؟ وضع هذا في MAKEFILE:.

export : *.bmml
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $** $(**B).png

ثم تشغيل:

nmake /A

وليس لدي Balsamiq لذلك لا يمكن اختبار هذا ولكن في حالتي إذا كان لدي MAKEFILE التالية:.

export : *.txt
    copy $** $(**B).dat

ووتشغيل nmake /A في مجلد على Myfile.txt، فإنه سيتم إنشاء myFile.dat.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top