目标模式不包含'%'.Makefile文件

Mik*_*ike 15 macos binding makefile objective-c xamarin.ios

我在谷歌搜索过这个问题,但仍然没有办法解决问题.我有2个Makefile:一个作为示例,一个作为我的文件. 例:

BINDDIR=/src/binding
XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=XMBindingLibrarySample
PROJECT=$(PROJECT_ROOT)/XMBindingLibrarySample.xcodeproj
TARGET=XMBindingLibrarySample
BTOUCH=/Developer/MonoTouch/usr/bin/btouch

 XMBindingLibrary.dll
libXMBindingLibrarySample-i386.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build -mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a $@
libXMBindingLibrarySample-armv6.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv6 -configuration Release clean      build -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@

libXMBindingLibrarySample-armv7.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@

libXMBindingLibrarySampleUniversal.a: libXMBindingLibrarySample-armv7.a libXMBindingLibrarySample-i386.a
lipo -create -output $@ $^

XMBindingLibrary.dll: AssemblyInfo.cs XMBindingLibrarySample.cs extras.cs libXMBindingLibrarySampleUniversal.a

$(BTOUCH) -unsafe --outdir=tmp -out:$@ XMBindingLibrarySample.cs -x=AssemblyInfo.cs -x=extras.cs --link-with=libXMBindingLibrarySampleUniversal.a,libXMBindingLibrarySampleUniversal.a

clean:
-rm -f *.a *.dll
Run Code Online (Sandbox Code Playgroud)

我的档案:

BTOUCH=/Developer/MonoTouch/usr/bin/btouch
BINDDIR=/src/binding
XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=IIViewDeckControllerSample
PROJECT=$(PROJECT_ROOT)/IIViewDeckController.xcodeproj
TARGET=IIViewDeckController

all: IIViewDeckController.dll

libIIViewDeckController-i386.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build -mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a $@

libIIViewDeckController-armv7.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build  -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@

libIIViewDeckControllerUniversal.a: libIIViewDeckController-armv7.a libIIViewDeckController-i386.a
lipo -create -output $@ $^

IIViewDeckController.dll: AssemblyInfo.cs APIDefinition.cs StructsAndEnums.cs libIIViewDeckControllerUniversal.a
$(BTOUCH) -unsafe  -out:$@ APIDefinition.cs -x=AssemblyInfo.cs -x=StructsAndEnums.cs --link-with=libIIViewDeckControllerUniversal.a,libIIViewDeckControllerUniversal.a

clean:
-rm -f *.a *.dll
Run Code Online (Sandbox Code Playgroud)

使用示例文件一切正常,我的错误:

Makefile:4: *** target pattern contains no `%'.  Stop.
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

Cha*_*iam 40

这是来自Make的错误编写的错误消息.这意味着"你的一个文件名中有一个字符可能是正则表达式的一部分".Make对于文件系统和引用非常天真.它不相信:

foo:  'The bar.'
Run Code Online (Sandbox Code Playgroud)

指文字字符串.它需要The一个词,bar.另一个词,然后是句号的barfs.改为:

foo:  The\ bar\.
Run Code Online (Sandbox Code Playgroud)

或者在你的情况下,反斜杠到期间.xcodeproj.

  • 这个答案大部分都是不对的。首先,make 对正则表达式一无所知,也不使用它们。其次,make不会“呕吐”;make 不关心句点字符;它对待他们就像对待任何其他正常角色一样(几乎在所有情况下——当然是这个)。第三,如果您在先决条件中显示“the bar.”,则被视为两个先决条件:第一个是“the”,第二个是“bar.”(请注意包含引号!)这个答案的准确部分是让引用变得非常天真:)。 (4认同)
  • 我的评论没有什么不文明的地方。事实很简单,make 不支持正则表达式,并且 make 不会在句点上“呕吐”(我的意思是,很难找到不具有至少一个包含句点的先决条件的 _any_ makefile!显然它们工作!),并且它将在引用的先决条件中包含文字引号。我真的不知道你所说的“发布示例”是什么意思。 (3认同)

Jer*_*oen 23

这不起作用:

default:
        echo "Hello world!"

这将:

default:
	echo "Hello world!"

您看得出来差别吗?

没错,第一个有空格,第二个有标签.带空格的那个会给你:

Makefile:2:***缺少分隔符.停止.

这就是我们不能拥有美好事物的原因......

  • GNU make 支持一项功能(`.RECIPEPREFIX`)来避免这种常见错误已有超过 10 年的时间(自 GNU make 3.82 起)。但是,大多数人不使用它。 (2认同)

RzR*_*RzR 8

确保:您的路径中没有,即cd ${url} => ://. 如果是这样,请像这样逃避它:

cd ${url} => \://
Run Code Online (Sandbox Code Playgroud)


Rad*_*ugh 7

这个错误发生在我身上,因为我有一个表格规则

foo: bar:
        baz
Run Code Online (Sandbox Code Playgroud)

(注意尾随:).