9

我正在使用 Android NDK 构建我的 cocos2dx 项目,在 Android.mk 中,有一个 LOCAL_SRC_FILES 的定义,其中列出了每个 cpp 文件。每当我添加一个新的源文件时,我也需要在那里添加它......它看起来像这样:

LOCAL_SRC_FILES := hellocpp/main.cpp \
                   hellocpp/myclass.cpp \
                   hellocpp/mynextclass.cpp \
                   ../../Classes/Screens/LaunchScreen.cpp \

但是,头文件可以指定要包含的整个目录,如下所示:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/hellocpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/Screens

我尝试了各种方法来包含整个目录而不是单个文件,LOCAL_SRC_FILES这样我就不需要在添加新文件时修改 Android.mk 构建脚本,但是,到目前为止,我所有的尝试都失败了。

我试过这个:

#SRC_PATH_HELLOCPP := $(wildcard hellocpp/*.cpp)
#SRC_PATH_CLASSES += $(wildcard ../../Classes/*.cpp)

#LOCAL_SRC_FILES := $(SRC_PATH_HELLOCPP:$(LOCAL_PATH/%=%)
#LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH/%=%)

还有这个:

#LOCAL_SRC_FILES += hellocpp/*.cpp
#LOCAL_SRC_FILES += ../../Classes/*.cpp

两者都不工作...

我有另一个项目与第一个选项配合得很好,我真的不明白为什么它在 cocos2dx 项目中不起作用......有人知道为什么或知道解决方案吗?或者也许我应该让它保持原样并承担麻烦,因为每个人都在这样做。但这真的很麻烦,希望有人能提供帮助,以便我们所有人都能更有效率..

谢谢!

4

7 回答 7

17

通配符也适用于 cocos2dx 项目。我自己使用它,只是你的语法不正确

尝试:

HELLOCPP_FILES  := $(wildcard $(LOCAL_PATH)/hellocpp/*.cpp)
HELLOCPP_FILES  := $(HELLOCPP_FILES:$(LOCAL_PATH)/%=%)

CLASSES_FILES   := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
CLASSES_FILES   := $(CLASSES_FILES:$(LOCAL_PATH)/%=%)

LOCAL_SRC_FILES := $(HELLOCPP_FILES)
LOCAL_SRC_FILES += $(CLASSES_FILES)
于 2013-12-10T04:16:05.333 回答
6

实际上通配符确实有效,而且您走在正确的轨道上...

这是一个对我有用的例子:

UTILITIES := $(wildcard $(LOCAL_PATH)/Utility/*.cpp)
ZIP := $(wildcard $(LOCAL_PATH)/Utility/zip/jni/*.c)

注意包含 $(LOCAL_PATH) 变量,然后

SOURCES := $(UTILITIES:$(LOCAL_PATH)/%=%)
SOURCES += $(ZIP:$(LOCAL_PATH)/%=%)

这应该允许您放入任何源文件,它会在不返回 Android.mk 文件的情况下进行编译。

于 2013-08-21T10:19:21.903 回答
1

要在 .cpp 下构建所有 .cpp 文件,如果您在类 UNIX 操作系统上构建项目,则../../Classes/可以使用 external命令:find

SRC_PATH_CLASSES := $(shell find ../../Classes/ -type f)
SRC_PATH_CLASSES := $(filter %.cpp, $(SRC_PATH_CLASSES))
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%)

正如链接中所建议的那样:GNU make 中的递归通配符?,另一种方法是使用以下递归通配符。它是用纯 Makefile 规则编写的,因此它是可移植的和更好的。

rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
SRC_PATH_CLASSES := $(call rwildcard, ../../Classes/, *.cpp)
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%)
于 2014-08-27T10:06:04.727 回答
1

我认为您不需要为新添加的 .cpp 文件添加整个标题..您应该以这种方式添加它

例如 。如果你想添加这个 LaunchScreen.cpp 那么你应该以这种简单的方式包含它

LOCAL_SRC_FILES:=hellocpp/main.cpp \
          ../../Classes/myclass.cpp\
          ../../Classes/mynextclass.cpp\ 
          ../../Classes/LaunchScreen.cpp\
于 2013-08-23T11:51:46.060 回答
0

这是一个生成文件。Makefiles 不是那样工作的。您不能为要编译的文件指定整个目录——它只是不是这样设置的。40 多年来一直如此。人们讨厌 makefile 的众多原因之一。问题是所有的替代品都一样糟糕。

于 2013-08-21T04:42:01.747 回答
0

经过数小时的努力,我找到了一个最终适用于我的 cocos2dx 设置的解决方案(cocos2dx 3.10)

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../Classes
FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp)
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%)

在这里回答是为了帮助有同样痛苦的人,因为 - 实际上 - 工作,这个问题仍然与今天有关值得注意的是,这也适用于 Windows,这是我在其他解决方案中遇到的主要问题

来源:http: //qiita.com/YosukeMitsugi/items/137f1b57f03945ad2d50

于 2016-02-13T08:22:54.107 回答
0

这就是在 win 10 下的 cocos2dx 3.10 中对我有用的:

FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp)

LOCAL_SRC_FILES := hellocpp/main.cpp \
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%)
于 2016-03-01T11:26:01.453 回答