makefile中strip的用法
时间: 2023-09-12 19:13:05 浏览: 304
在 Makefile 中,strip 函数用于去除字符串的前导和尾部空格。其语法如下:
```
$(strip string)
```
其中,`string` 是要被去除空格的字符串。
下面是一个示例:
```makefile
str := Hello, World!
stripped_str := $(strip $(str))
$(info Original string: $(str))
$(info Stripped string: $(stripped_str))
```
运行上述示例后,输出结果为:
```
Original string: Hello, World!
Stripped string: Hello, World!
```
可以看到,strip 函数将原始字符串中的前导和尾部空格去除,返回一个没有空格的新字符串。
相关问题
工程目录文件包括./src/main.c和./src/ParseConfig.c 2. 编写一个MakeFile,完成以下要求: a. 执行make,能自动完成编译和连接过程,生成libParseConfig.a, libParseConfig.so和ParseConfig程序 b. 执行make release, 编译生成的.o文件存放于RELEASE目录,编译参数包含-Os -DNDEBUG, 链接完成之后对libParseConfig.so和ParseConfig自动进行strip c. 执行make debug, 编译生成的.o文件存放于DEBUG目录,,编译参数包含-g,链接完成之后libParseConfig.so和ParseConfi不strip d. 执行make static_release, 生成的ParseConfig自动strip,并且不依赖libParseConfig.so e. 执行make debug_release, ParseConfi不strip,并且不依赖libParseConfig.so f. 执行make clean, 能够清除所有的二进制文件和中间文件
好的,我明白了。下面是Makefile的编写:
```makefile
CC = gcc
CFLAGS = -Wall
LDFLAGS = -L.
LDLIBS = -lParseConfig
SRC_DIR = ./src
RELEASE_DIR = ./RELEASE
DEBUG_DIR = ./DEBUG
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(addprefix $(RELEASE_DIR)/, $(notdir $(SRCS:.c=.o)))
DEBUG_OBJS = $(addprefix $(DEBUG_DIR)/, $(notdir $(SRCS:.c=.o)))
.PHONY: all release debug static_release debug_release clean
all: release
release: CFLAGS += -Os -DNDEBUG
release: LDFLAGS += -Wl,-rpath=.
release: libParseConfig.a libParseConfig.so ParseConfig
strip -s libParseConfig.so ParseConfig
debug: CFLAGS += -g
debug: LDFLAGS += -Wl,-rpath=.
debug: libParseConfig.so ParseConfig
mv libParseConfig.so $(DEBUG_DIR)/libParseConfig.so
mv ParseConfig $(DEBUG_DIR)/ParseConfig
static_release: CFLAGS += -Os -DNDEBUG -static
static_release: ParseConfig
strip -s ParseConfig
debug_release: CFLAGS += -g -static
debug_release: ParseConfig
mv ParseConfig $(DEBUG_DIR)/ParseConfig
libParseConfig.a: $(OBJS)
ar cr $@ $^
libParseConfig.so: $(OBJS)
$(CC) $(LDFLAGS) -shared -o $@ $^
$(RELEASE_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
$(DEBUG_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
ParseConfig: $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
clean:
rm -rf $(RELEASE_DIR)/*.o $(DEBUG_DIR)/*.o libParseConfig.a libParseConfig.so ParseConfig
```
使用方法:
- 执行 `make`:编译并链接生成 `libParseConfig.a`、`libParseConfig.so` 和 `ParseConfig`。
- 执行 `make release`:编译生成的 `.o` 文件存放于 `RELEASE` 目录,编译参数包含 `-Os` 和 `-DNDEBUG`,链接完成之后对 `libParseConfig.so` 和 `ParseConfig` 自动进行 `strip`。
- 执行 `make debug`:编译生成的 `.o` 文件存放于 `DEBUG` 目录,编译参数包含 `-g`,链接完成之后 `libParseConfig.so` 和 `ParseConfig` 不进行 `strip`。
- 执行 `make static_release`:生成的 `ParseConfig` 自动 `strip`,并且不依赖 `libParseConfig.so`。
- 执行 `make debug_release`:`ParseConfig` 不进行 `strip`,并且不依赖 `libParseConfig.so`。
- 执行 `make clean`:清除所有的二进制文件和中间文件。
工程目录文件包括./src/main.c和./src/ParseConfig.c和./lib/ParseConfig.h 2. 编写一个MakeFile,单条语句实现以下要求: a. 执行make,能自动完成编译和连接过程,生成libParseConfig.a, libParseConfig.so和ParseConfig程序 b. 执行make release, 编译生成的.o文件存放于RELEASE目录,编译参数包含-Os -DNDEBUG, 链接完成之后对libParseConfig.so和ParseConfig自动进行strip c. 执行make debug, 编译生成的.o文件存放于DEBUG目录,,编译参数包含-g,链接完成之后libParseConfig.so和ParseConfi不strip d. 执行make static_release, 生成的ParseConfig自动strip,并且不依赖libParseConfig.so e. 执行make debug_release, ParseConfi不strip,并且不依赖libParseConfig.so f. 执行make clean, 能够清除所有的二进制文件和中间文件
以下是基于你提供的工程目录文件的Makefile:
```
# 编译器和编译选项
CC=gcc
CFLAGS=-Wall
# 目录和文件名
SRCDIR=./src
LIBDIR=./lib
RELEASEDIR=./RELEASE
DEBUGDIR=./DEBUG
TARGET=ParseConfig
# 源文件和目标文件
SRC=$(SRCDIR)/main.c $(SRCDIR)/ParseConfig.c
OBJ=$(patsubst $(SRCDIR)/%.c, $(DEBUGDIR)/%.o, $(SRC))
RELOBJ=$(patsubst $(SRCDIR)/%.c, $(RELEASEDIR)/%.o, $(SRC))
# 目标文件
LIBSTATIC=$(LIBDIR)/libParseConfig.a
LIBSHARED=$(LIBDIR)/libParseConfig.so
# 默认目标
all: $(TARGET) $(LIBSTATIC) $(LIBSHARED)
# 编译生成目标文件和库文件
$(TARGET): $(OBJ)
$(CC) $(CFLAGS) -o $@ $^ -L$(LIBDIR) -lParseConfig
$(LIBSTATIC): $(OBJ)
ar rcs $@ $^
$(LIBSHARED): $(OBJ)
$(CC) $(CFLAGS) -shared -o $@ $^
# 编译release版本
release: CFLAGS+=-Os -DNDEBUG
release: $(RELOBJ) $(LIBSHARED) $(TARGET)
$(CC) $(CFLAGS) -o $(RELEASEDIR)/$(TARGET) $^ -L$(LIBDIR) -lParseConfig
strip -s $(RELEASEDIR)/$(TARGET)
strip -s $(LIBSHARED)
$(RELOBJ): $(SRC)
$(CC) $(CFLAGS) -c $^ -o $@
# 编译debug版本
debug: CFLAGS+=-g
debug: $(OBJ) $(LIBSHARED) $(TARGET)
$(DEBUGDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAGS) -c $^ -o $@
# 编译static_release版本
static_release: CFLAGS+=-Os -DNDEBUG
static_release: $(OBJ) $(LIBSTATIC) $(TARGET)
$(CC) $(CFLAGS) -o $(RELEASEDIR)/$(TARGET) $^
strip -s $(RELEASEDIR)/$(TARGET)
# 编译debug_release版本
debug_release: CFLAGS+=-g
debug_release: $(OBJ) $(TARGET)
$(CC) $(CFLAGS) -o $(RELEASEDIR)/$(TARGET) $^
strip -s $(RELEASEDIR)/$(TARGET)
# 清除所有生成的文件
clean:
rm -f $(OBJ) $(RELOBJ) $(TARGET) $(LIBSTATIC) $(LIBSHARED) $(RELEASEDIR)/$(TARGET) $(DEBUGDIR)/$(TARGET)
```
使用方法:
- 执行 `make` 可以自动完成编译和连接过程,生成 `libParseConfig.a`, `libParseConfig.so` 和 `ParseConfig` 程序。
- 执行 `make release` 可以编译生成的 `.o` 文件存放于 `RELEASE` 目录,编译参数包含 `-Os -DNDEBUG`,链接完成之后对 `libParseConfig.so` 和 `ParseConfig` 自动进行 `strip`。
- 执行 `make debug` 可以编译生成的 `.o` 文件存放于 `DEBUG` 目录,编译参数包含 `-g`,链接完成之后 `libParseConfig.so` 和 `ParseConfig` 不 `strip`。
- 执行 `make static_release` 可以生成的 `ParseConfig` 自动 `strip`,并且不依赖 `libParseConfig.so`。
- 执行 `make debug_release` 可以 `ParseConfig` 不 `strip`,并且不依赖 `libParseConfig.so`。
- 执行 `make clean` 可以清除所有的二进制文件和中间文件。