我想用ndk构建我的android项目,所以我创建了这样的make文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game_logic
LOCAL_SRC_FILES := AppDelegate.cpp\
MainMenuScene.cpp\
ArtTestScene.cpp\
AppDelegate.cpp\
objb/Config.cpp\
objb/ExtendedString.cpp\
objb/json.cpp\
objb/TimeStamper.cpp \
Objects/Actor.cpp \
Objects/BackGround.cpp \
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../cocos2dx \
$(LOCAL_PATH)/../../cocos2dx/platform \
$(LOCAL_PATH)/../../cocos2dx/include \
$(LOCAL_PATH)/../../CocosDenshion/include \
$(LOCAL_PATH)/../../cocos2dx/lua_support \
objb \
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../android/libs/$(TARGET_ARCH_ABI)) \
-lcocos2d -lcocosdenshion \
-L$(call host-path, $(LOCAL_PATH)/../../cocos2dx/platform/third_party/android/libraries/$(TARGET_ARCH_ABI)) -lcurl
include $(BUILD_SHARED_LIBRARY)
问题是我得到这个错误:
jni/../../Classes/Android.mk:12: *** recipe commences before first target. Stop.
但是当我减少源文件(任何源文件)时,我没有收到此错误!但是我的项目从未构建,因为没有构建所需的源文件
答案 0 :(得分:6)
这个错误的含义是(a)有一个以TAB字符开头的行,(b)它不是任何其他类型的行知道(例如变量赋值等)。
在这种情况下,make假定该行旨在成为规则的配方的一部分,但它之前没有规则(没有目标)。
问题在于您的行:
objb/json.cpp\
在反斜杠之后有一个空格。因此,反斜杠不会转义换行符,因此make不认为下一行是变量赋值的一部分。因为它以TAB开始...
在makefile中,确保您没有任何无关的尾随空格是至关重要的。许多现代编辑都有模式可以显示:编辑makefile时启用它们。