LOCAL_SRC_FILES := $(filter-out $(patsubst %.Android.mk, %.cpp, $(wildcard $(abspath $(LOCAL_PATH))/*.Android.mk)), $(wildcard $(abspath $(LOCAL_PATH))/*.cpp))
时间: 2024-02-18 17:27:12 浏览: 148
这是一个 Android NDK 中的 Makefile 语法,用于获取当前目录下所有的 .cpp 文件,并排除掉同目录下的 .Android.mk 文件(如果有的话)。该语法可以用于将当前目录下的所有 .cpp 文件编译为一个库文件。具体来说,`$(abspath $(LOCAL_PATH))` 获取当前目录的绝对路径,`$(wildcard $(abspath $(LOCAL_PATH))/*.cpp)` 获取该目录下的所有 .cpp 文件,`$(wildcard $(abspath $(LOCAL_PATH))/*.Android.mk)` 获取该目录下的所有 .Android.mk 文件,`$(patsubst %.Android.mk, %.cpp, ...)` 将所有 .Android.mk 文件的文件名替换为对应的 .cpp 文件名,`$(filter-out ...)` 过滤掉这些 .cpp 文件。最终得到的是除了 .Android.mk 文件之外的所有 .cpp 文件。
相关问题
检查以下代码是否有误,改正后编译CC := gccCFLAGS := -Wall -Wextra -g -fPICTARGET := calcSRCS := $(wildcard src/*.c)OBJS := $(patsubst %.c, %.o, $(SRCS))LIB_OBJS := $(filter-out src/main.o, $(OBJS))LIB := libuser.so$(LIB): $(LIB_OBJS) $(CC) -shared $^ -o $@$(TARGET): src/main.o $(LIB) $(CC) $< -L. -luser -o $@.PHONY: buildbuild: $(LIB).PHONY: installinstall: $(TARGET) install -m 0755 $(TARGET) /usr/local/bin.PHONY: cleanclean: rm -f src/*.o $(LIB) $(TARGET).PHONY: distcleandistclean: clean rm -rf $(TARGET) /usr/local/bin/$(TARGET)
这个 Makefile 文件看起来没有语法错误,但是需要注意一个问题。在 install 规则中,需要将目标文件的文件名改为 $(TARGET),以避免将目标文件安装到 /usr/local/bin 下一个与目标文件同名的文件。
以下是修改后的 Makefile 文件:
```
CC := gcc
CFLAGS := -Wall -Wextra -g -fPIC
TARGET := calc
SRCS := $(wildcard src/*.c)
OBJS := $(patsubst %.c, %.o, $(SRCS))
LIB_OBJS := $(filter-out src/main.o, $(OBJS))
LIB := libuser.so
$(LIB): $(LIB_OBJS)
$(CC) -shared $^ -o $@
$(TARGET): src/main.o $(LIB)
$(CC) $< -L. -luser -o $@
.PHONY: build
build: $(LIB)
.PHONY: install
install: $(TARGET)
install -m 0755 $(TARGET) /usr/local/bin/$(TARGET)
.PHONY: clean
clean:
rm -f src/*.o $(LIB) $(TARGET)
.PHONY: distclean
distclean: clean
rm -rf $(TARGET) /usr/local/bin/$(TARGET)
```
这个 Makefile 文件定义了 CC 和 CFLAGS 变量的值。规定了目标文件 libuser.so 的依赖文件为 $(LIB_OBJS),以及编译这些文件的规则。同时,规定了目标文件 calc 的依赖文件为 src/main.o 和 $(LIB),以及编译这些文件的规则。增加了 build,install,clean 和 distclean 规则。在 install 规则中,将目标文件的文件名改为 $(TARGET)。
检查以下代码是否有误#makefile for the priject CC := gcc CFLAGS = -Wall -Wextra -g -fPIC TARGET := calc SRCS := $(wildcard src/*.c) OBJS = $(patsubst %.c, %.o, $(SRCS)) LIB_OBJS := $(filter-out src/main.o, $(OBJS)) LIB := libuser.so $(LIB): $(LIB_OBJS) $(CC) -shared $^ -o $@ $(TARGET): src/main.o $(LIB) $(CC) $< -L. -luser -o $@ .PHONY: build build: $(LIB) .PHONY: install install:
这个 Makefile 文件看起来没有语法错误,但是缺少一些规则,例如 clean 和 distclean 规则。同时,这个 Makefile 文件需要定义变量的值,例如 CC 和 CFLAGS。
以下是一个更新后的 Makefile 文件示例:
```
CC := gcc
CFLAGS := -Wall -Wextra -g -fPIC
TARGET := calc
SRCS := $(wildcard src/*.c)
OBJS := $(patsubst %.c, %.o, $(SRCS))
LIB_OBJS := $(filter-out src/main.o, $(OBJS))
LIB := libuser.so
$(LIB): $(LIB_OBJS)
$(CC) -shared $^ -o $@
$(TARGET): src/main.o $(LIB)
$(CC) $< -L. -luser -o $@
.PHONY: build
build: $(LIB)
.PHONY: install
install: $(TARGET)
install -m 0755 $(TARGET) /usr/local/bin
.PHONY: clean
clean:
rm -f src/*.o $(LIB) $(TARGET)
.PHONY: distclean
distclean: clean
rm -rf $(TARGET) /usr/local/bin/$(TARGET)
```
这个 Makefile 文件定义了 CC 和 CFLAGS 变量的值。规定了目标文件 libuser.so 的依赖文件为 $(LIB_OBJS),以及编译这些文件的规则。同时,规定了目标文件 calc 的依赖文件为 src/main.o 和 $(LIB),以及编译这些文件的规则。增加了 build,install,clean 和 distclean 规则。
阅读全文