android.mk local_src_files_64,如何自动设好 Android.mk 的 LOCAL_SRC_FILES 和 LOCAL_C_INCLUDES

本文介绍了在使用cocos2d-x开发Android游戏时,如何通过Makefile自动化设置Android.mk的LOCAL_SRC_FILES和LOCAL_C_INCLUDES,避免手动修改。文中提供了两种方法,包括调用shell命令和纯Makefile语法,以及针对不需要编译的源代码文件的排除策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用cocos2d-x开发Android游戏时,需要在Android.mk文件中,为LOCAL_SRC_FILES变量指定要编译的源代码,以及为LOCAL_C_INCLUDES变量指定头文件。当项目文件越来越多时,这种手动修改很浪费时间。好在Android.mk其实就是一个makefile,我们可以借助makefile语法来自动完成这部分工作。

使用外部命令

最简单的方式就是调用shell外部命令。首先我们指定要搜索的源文件根目录,设为SRC_ROOT这个变量。LOCAL_C_INCLUDES变量直接就是用find -type d命令去搜索根目录下的目录。LOCAL_SRC_FILES稍微复杂一些,首先我们先用find -type f得到所有的普通文件路径,再指定源代码文件名的匹配模式(例如我用的是c++,所以我指定了变量SRC_SUFFIX存放一般c++源代码文件的后缀名),用filter命令筛选出所有的源代码文件路径。

完整的代码如下:

# WARNING: Shell command is used, it is only works on a UNIX-like OS.

# Replace it with Makefile rules if you want to run on Windows.

SRC_SUFFIX := *.cpp *.c

SRC_ROOT := $(LOCAL_PATH)/../../Classes

ALL_FILES := $(shell find $(SRC_ROOT) -type f)

SRC_FILES := $(filter $(subst *,%,$(SRC_SUFFIX)),$(ALL_FILES))

LOCAL_SRC_FILES := hellocpp/

<think>嗯,用户问的是关于LOCAL_SRC_FILES中包含多个c文件h文件的问题。首先,我需要确认用户是在使用Android.mk或者类似的构建系统,比如NDK开发的时候遇到这个问题。LOCAL_SRC_FILES通常用于指定源文件,但用户可能误将头文件(.h)添加到这里了。 用户可能不太清楚构建过程中源文件头文件的区别。头文件一般不需要在LOCAL_SRC_FILES中列出,因为它们会被源文件通过#include自动包含进去。如果用户把.h文件加进去,可能会导致构建错误或者不必要的处理。 接下来,我需要解释LOCAL_SRC_FILES的正确用法,强调应该只包含.c、.cpp等源文件。同时,提醒用户头文件应该放在LOCAL_C_INCLUDESLOCAL_EXPORT_C_INCLUDES中,这样编译器才能找到它们的位置。 用户可能有多个源文件需要编译,这时候需要正确列出所有需要的.c文件,可以使用通配符或者逐个添加。同时,要注意路径问题,确保相对路径正确,避免文件找不到的错误。 可能用户遇到了构建失败的问题,比如链接错误或者找不到头文件,所以需要检查LOCAL_SRC_FILES是否有误,以及头文件路径是否正确设置。此外,还要确认是否在Android.mk的其他部分正确配置了模块类型,比如使用LOCAL_MODULELOCAL_MODULE_TAGS等。 最后,给出一个具体的示例,展示正确的写法,帮助用户直观地理解如何修改他们的Android.mk文件。同时,总结关键点,强调不要包含头文件,正确设置包含路径,以及如何处理多个源文件的情况。</think>在 **Android NDK 开发**或 **Makefile 构建系统**中,`LOCAL_SRC_FILES` 是一个常见的变量,用于指定编译时需要包含的**源代码文件**(如 `.c`、`.cpp` 文件)。以下是关于它的关键点使用方法: -- ### **1. `LOCAL_SRC_FILES` 的作用** - **定义源文件列表**:告诉编译器需要编译哪些源文件(如 `.c`, `.cpp`, `.s` 等)。 - **路径规则**:文件路径可以是绝对路径,但更常见的是**相对路径**(相对于 `Android.mk` 或 `Makefile` 所在目录)。 --- ### **2. 添加多个 `.c` 文件** 直接在 `LOCAL_SRC_FILES` 中列出所有需要的 `.c` 文件(用空格分隔): ```makefile LOCAL_SRC_FILES := main.c utils.c \ # 显式列出文件 lib/algorithm.c # 支持子目录 ``` 或使用 **通配符**(注意:需谨慎,可能包含意外文件): ```makefile LOCAL_SRC_FILES := $(wildcard src/*.c) # 匹配 src/ 目录下所有 .c 文件 ``` --- ### **3. `.h` 文件不需要添加到 `LOCAL_SRC_FILES`** - **头文件(`.h`)的作用**:仅用于声明函数、变量、结构体等,不参与直接编译。 - **头文件的处理方式**: 通过 `LOCAL_C_INCLUDES` 指定头文件搜索路径: ```makefile LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \ # 添加头文件目录 $(LOCAL_PATH)/lib ``` --- ### **4. 常见错误** - **错误示例**:将 `.h` 文件加入 `LOCAL_SRC_FILES` ```makefile LOCAL_SRC_FILES := main.c utils.h # 错误!.h 文件不应出现在这里 ``` - **结果**:编译器会尝试编译 `.h` 文件,导致语法错误或重复定义。 - **头文件未包含路径**: 如果未通过 `LOCAL_C_INCLUDES` 指定路径,编译器会提示 `undefined reference` 错误。 --- ### **5. 完整示例(Android NDK)** ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # 模块名 LOCAL_MODULE := mylib # 源文件列表(仅.c/.cpp) LOCAL_SRC_FILES := main.c \ utils.c \ lib/algorithm.c # 头文件搜索路径 LOCAL_C_INCLUDES := $(LOCAL_PATH)/include # 依赖的库(可选) LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) ``` --- ### **6. 关键总结** | 内容 | 说明 | |---------------------|----------------------------------------------------------------------| | `LOCAL_SRC_FILES` | 仅包含需要编译的源文件(`.c`/`.cpp`),**不包含 `.h`**。 | | `LOCAL_C_INCLUDES` | 指定头文件(`.h`)所在目录,确保编译器能找到它们。 | | 路径格式 | 使用相对路径(相对于 `LOCAL_PATH`)或绝对路径。 | 如果仍有问题,请检查文件路径是否正确,或确保所有源文件未被其他模块重复编译!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值