33

我在谷歌搜索过这个问题,但仍然没有解决问题的方法。我有 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

我的文件:

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

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

Makefile:4: *** target pattern contains no `%'.  Stop.
make: *** [all] Error 2
4

8 回答 8

48

这是来自 Make 的错误信息。这意味着“您的一个文件名具有可能是正则表达式的一部分的字符”。Make 对文件系统和引用非常幼稚。它不相信:

foo:  'The bar.'

指的是文字字符串。它The作为一个词,bar.作为另一个词,然后在句号上呕吐。改为这样做:

foo:  The\ bar\.

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

于 2014-06-27T22:44:41.760 回答
37

这不起作用:

default:
        echo "Hello world!"

这会:

default:
	echo "Hello world!"

您看得出来差别吗?

没错,第一个有空格,第二个有 tabs。带空格的会给你:

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

这就是为什么我们不能拥有美好的事物...

于 2017-10-19T07:58:43.083 回答
15

这个错误发生在我身上,因为我有一个形式的规则

foo: bar:
        baz

(注意尾随:)。

于 2017-09-10T01:13:30.653 回答
9

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

cd ${url} => \://
于 2018-10-05T19:03:11.673 回答
0

如果目标文件名(即时间戳)中有冒号,我会遇到这个问题,例如:

 all: foo_01:34.txt
 
 foo_%.txt: bar_%.txt
      foobar $< > $@

我不得不逃避它:

 all: foo_01\:34.txt
 
 foo_%.txt: bar_%.txt
      foobar $< > $@
于 2020-09-23T00:05:37.677 回答
0

当您的源文件包含在名称包含冒号 (:) 的目录中时,就会出现问题。

于 2021-05-10T06:16:36.277 回答
-2

已解决:只需转到它将显示在垂直选项卡部分的项目选项卡,然后转到常规并更改项目的位置

于 2018-12-19T05:28:21.747 回答
-4

将第 11 行放在https://github.com/mkovalyk/IIViewDeckControllerBinding/blob/master/src/binding/Makefile上。%'不被 make 识别

于 2013-02-28T08:37:47.920 回答